MySQL數(shù)據(jù)庫引擎


一.Innodb引擎

Innodb引擎提供了對數(shù)據(jù)庫ACID事務的支持睡雇,并且實現(xiàn)了SQL標準的四種隔離級別。該引擎還提供了行級鎖和外鍵約束混移,它的設計目標是處理大容量數(shù)據(jù)庫系統(tǒng)亲茅,它本身其實就是基于MySQL后臺的完整數(shù)據(jù)庫系統(tǒng),MySQL運行時Innodb會在內(nèi)存中建立緩沖池验残,用于緩沖數(shù)據(jù)和索引氨鹏。但是該引擎不支持FULLTEXT類型的索引何缓,而且它沒有保存表的行數(shù)还栓,當SELECT COUNT(*) FROM TABLE時需要掃描全表碌廓。當需要使用數(shù)據(jù)庫事務時,該引擎當然是首選剩盒。由于鎖的粒度更小谷婆,寫操作不會鎖定全表,所以在并發(fā)較高時辽聊,使用Innodb引擎會提升效率纪挎。但是使用行級鎖也不是絕對的,如果在執(zhí)行一個SQL語句時MySQL不能確定要掃描的范圍跟匆,InnoDB表同樣會鎖全表异袄。

二.MyIASM引擎

MyIASM是MySQL默認的引擎,但是它沒有提供對數(shù)據(jù)庫事務的支持玛臂,也不支持行級鎖和外鍵烤蜕,因此當INSERT(插入)或UPDATE(更新)數(shù)據(jù)時即寫操作需要鎖定整個表封孙,效率便會低一些。不過和Innodb不同讽营,MyIASM中存儲了表的行數(shù)虎忌,于是SELECT COUNT(*) FROM TABLE時只需要直接讀取已經(jīng)保存好的值而不需要進行全表掃描。如果表的讀操作遠遠多于寫操作且不需要數(shù)據(jù)庫事務的支持橱鹏,那么MyIASM也是很好的選擇膜蠢。

三.MyISAM與InnoDB的區(qū)別

1、MyIASM是非事務安全的莉兰,而InnoDB是事務安全的

2挑围、MyIASM鎖的粒度是表級的,而InnoDB支持行級鎖

3贮勃、MyIASM支持全文類型索引贪惹,而InnoDB不支持全文索引

4、MyIASM相對簡單寂嘉,效率上要優(yōu)于InnoDB奏瞬,小型應用可以考慮使用MyIASM

5、MyIASM表保存成文件形式泉孩,跨平臺使用更加方便

6硼端、MyISAM類型的表強調(diào)的是性能,其執(zhí)行數(shù)度比InnoDB類型更快

以下是一些細節(jié)和具體實現(xiàn)的差別:

1.InnoDB不支持FULLTEXT類型的索引寓搬。

2.InnoDB 中不保存表的具體行數(shù)珍昨,也就是說,執(zhí)行select count(*) fromtable時句喷,InnoDB要掃描一遍整個表來計算有多少行镣典,但是MyISAM只要簡單的讀出保存好的行數(shù)即可。注意的是唾琼,當count(*)語句包含where條件時兄春,兩種表的操作是一樣的。

3.對于AUTO_INCREMENT類型的字段锡溯,InnoDB中必須包含只有該字段的索引赶舆,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引祭饭。

4.DELETE FROM table時芜茵,InnoDB不會重新建立表,而是一行一行的刪除倡蝙。

5.LOAD TABLE FROMMASTER操作對InnoDB是不起作用的九串,解決方法是首先把InnoDB表改成MyISAM表,導入數(shù)據(jù)后再改成InnoDB表寺鸥,但是對于使用的額外的InnoDB特性(例如外鍵)的表不適用蒸辆。

另外征炼,InnoDB表的行鎖也不是絕對的,假如在執(zhí)行一個SQL語句時MySQL不能確定要掃描的范圍躬贡,InnoDB表同樣會鎖全表谆奥,例如updatetable set num=1 where name like “a%”

兩種類型最主要的差別就是Innodb支持事務處理與外鍵和行級鎖.而MyISAM不支持.所以MyISAM往往就容易被人認為只適合在小項目中使用。

從對數(shù)據(jù)庫平臺要達到需求:99.9%的穩(wěn)定性拂玻,方便的擴展性和高可用性來說的話酸些,MyISAM絕對是首選。

原因如下:

1檐蚜、如果是讀多寫少的項目魄懂,建議使用MyISAM,MyISAM的讀性能是比Innodb強不少的闯第。

2市栗、MyISAM的索引和數(shù)據(jù)是分開的,并且索引是有壓縮的咳短,內(nèi)存使用率就對應提高了不少填帽。能加載更多索引,而Innodb是索引和數(shù)據(jù)是緊密捆綁的咙好,沒有使用壓縮從而會造成Innodb比MyISAM體積龐大不小篡腌。

3、select count(*) 和order by是最頻繁的勾效,大概能占了整個sql總語句的60%以上的操作嘹悼,而這種操作Innodb其實也是會鎖表的,很多人以為Innodb是行級鎖层宫,那個只是where對它主鍵是有效杨伙,非主鍵的都會鎖全表的。

4萌腿、如果和MyISAM比insert寫操作的話缀台,Innodb還達不到MyISAM的寫性能,如果是針對基于索引的update操作哮奇,雖然MyISAM可能會遜色Innodb,但是那么高并發(fā)的寫,從庫能否追的上也是一個問題睛约,還不如通過多實例分庫分表架構來解決鼎俘。

四.MyISAM和InnoDB應用場景:

1、MyIASM管理非事務表辩涝,提供高速存儲和檢索以及全文搜索能力贸伐,如果再應用中執(zhí)行大量select操作,應該選擇MyIASM

2怔揩、InnoDB用于事務處理捉邢,具有ACID事務支持等特性脯丝,如果在應用中執(zhí)行大量insert和update操作,應該選擇InnoDB

一般來說伏伐,MyISAM適合:

(1)做很多count 的計算宠进;

(2)插入不頻繁,查詢非常頻繁藐翎;

(3)沒有事務材蹬。

InnoDB適合:

(1)可靠性要求比較高,或者要求事務吝镣;

(2)表更新和查詢都相當?shù)念l繁堤器,并且表鎖定的機會比較大的情況指定數(shù)據(jù)引擎的創(chuàng)建

可以肯定的是,MyISAM的確快末贾,但是如果你的邏輯設計需要事務處理闸溃,你就可以自由使用支持事務處理的引擎。進一步講拱撵,由于MySQL能夠允許你在表格這一層應用數(shù)據(jù)庫引擎辉川,所以你可以只對需要事務處理的表格來進行性能優(yōu)化,而把不需要事務處理的表格交給更加輕便的MyISAM引擎裕膀。對于 MySQL而言员串,靈活性才是關鍵。

MySQL 官方對InnoDB是這樣解釋的:InnoDB給MySQL提供了具有提交昼扛、回滾和崩潰恢復能力的事務安全(ACID兼容)存儲引擎寸齐。InnoDB鎖定在行級并且也在SELECT語句提供一個Oracle風格一致的非鎖定讀,這些特色增加了多用戶部署和性能抄谐。沒有在InnoDB中擴大鎖定的需要渺鹦,因為在InnoDB中行級鎖定適合非常小的空間。InnoDB也支持FOREIGN KEY強制蛹含。在SQL查詢中毅厚,你可以自由地將InnoDB類型的表與其它MySQL的表的類型混合起來,甚至在同一個查詢中也可以混合浦箱。

InnoDB是為處理巨大數(shù)據(jù)量時的最大性能設計吸耿,它的CPU效率可能是任何其它基于磁盤的關系數(shù)據(jù)庫引擎所不能匹敵的。

InnoDB存儲引擎被完全與MySQL服務器整合酷窥,InnoDB存儲引擎為在主內(nèi)存中緩存數(shù)據(jù)和索引而維持它自己的緩沖池咽安。InnoDB存儲它的表&索引在一個表空間中,表空間可以包含數(shù)個文件(或原始磁盤分區(qū))蓬推。這與MyISAM表不同妆棒,比如在MyISAM表中每個表被存在分離的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制為2GB的操作系統(tǒng)上糕珊。

InnoDB默認地被包含在MySQL二進制分發(fā)中动分。Windows Essentials installer使InnoDB成為Windows上MySQL的默認表。

InnoDB被用來在眾多需要高性能的大型數(shù)據(jù)庫站點上產(chǎn)生红选。著名的Internet新聞站點Slashdot.org運行在InnoDB上澜公。 Mytrix, Inc.在InnoDB上存儲超過1TB的數(shù)據(jù),還有一些其它站點在InnoDB上處理平均每秒800次插入/更新的.

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纠脾,一起剝皮案震驚了整個濱河市玛瘸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苟蹈,老刑警劉巖糊渊,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異慧脱,居然都是意外死亡渺绒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門菱鸥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宗兼,“玉大人,你說我怎么就攤上這事氮采∫笊埽” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵鹊漠,是天一觀的道長主到。 經(jīng)常有香客問我,道長躯概,這世上最難降的妖魔是什么登钥? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮娶靡,結果婚禮上牧牢,老公的妹妹穿的比我還像新娘。我一直安慰自己姿锭,他們只是感情好塔鳍,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呻此,像睡著了一般轮纫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趾诗,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音,去河邊找鬼恃泪。 笑死郑兴,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的贝乎。 我是一名探鬼主播情连,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼览效!你這毒婦竟也來了却舀?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤锤灿,失蹤者是張志新(化名)和其女友劉穎挽拔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體但校,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡螃诅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了状囱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片术裸。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖亭枷,靈堂內(nèi)的尸體忽然破棺而出袭艺,到底是詐尸還是另有隱情,我是刑警寧澤叨粘,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布猾编,位于F島的核電站,受9級特大地震影響宣鄙,放射性物質(zhì)發(fā)生泄漏袍镀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一冻晤、第九天 我趴在偏房一處隱蔽的房頂上張望苇羡。 院中可真熱鬧,春花似錦鼻弧、人聲如沸设江。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叉存。三九已至,卻和暖如春度帮,著一層夾襖步出監(jiān)牢的瞬間歼捏,已是汗流浹背稿存。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瞳秽,地道東北人瓣履。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像练俐,于是被迫代替她去往敵國和親袖迎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容