MySQL中MyISAM和InnoDB的區(qū)別

純復(fù)制粘貼網(wǎng)上的鼠哥,記錄一下,免得自己忘了,又找不到朴恳。

什么是MyISAM?
MyISAM是MySQL關(guān)系數(shù)據(jù)庫管理系統(tǒng)的默認(rèn)儲存引擎(5.5之前)抄罕。這種MySQL表存儲結(jié)構(gòu)從舊的ISAM代碼擴(kuò)展 出許多有用的功能。在新版本的MySQL中于颖,InnoDB引擎由于其對事務(wù)呆贿,參照完整性,以及更高的并發(fā)性等優(yōu)點開始廣泛的取代MyISAM森渐。
每一個MyISAM表都對應(yīng)于硬盤上的三個文件做入。這三個文件有一樣的文件名,但是有不同的擴(kuò)展名以指示其類型用途:.frm文件保存表的定義同衣,但是這個文件并不是MyISAM引擎的一部分竟块,而是服務(wù)器的一部分;.MYD保存表的數(shù)據(jù)乳怎;.MYI是表的索引文件彩郊。
什么是InnoDB?
InnoDB是MySQL的另一個存儲引擎,目前MySQL AB所發(fā)行新版的標(biāo)準(zhǔn)蚪缀,被包含在所有二進(jìn)制安裝包里秫逝,5.5之后作為默認(rèn)的存儲引擎。較之于其它的存儲引擎它的優(yōu)點是它支持兼容ACID的事務(wù)(類似于PostgreSQL),以及參數(shù) 完整性(即對外鍵的支持)询枚。
Oracle公司與2005年10月收購了Innobase违帆。Innobase采用雙認(rèn)證授權(quán)。它使用GNU發(fā)行金蜀,也允許其它想將InnoDB結(jié)合到商業(yè)軟件的團(tuán)體獲得授權(quán)刷后。
目前比較普及的存儲引擎是MyISAM和InnoDB。MyISAM與InnoDB的主要的不同點在于性能和事務(wù)控制上渊抄。MyISAM是早期ISAM(Indexed Sequential Access Method尝胆,MySQL5.0之后已經(jīng)不支持ISAM了)的擴(kuò)展實現(xiàn),ISAM被設(shè)計為適合處理讀頻率遠(yuǎn)大于寫頻率這樣的情況护桦,因此ISAM以及后來的MyISAM都沒有考慮對事物的支持含衔,排除了TPM,不需要事務(wù)記錄二庵,ISAM的查詢效率相當(dāng)可觀贪染,而且內(nèi)存占用很少。
MyISAM在繼承了這類優(yōu)點的同時催享,與時俱進(jìn)地提供了大量實用的新特性和相關(guān)工具杭隙。例如考慮到并發(fā)控制,提供了表級鎖因妙,雖然MyISAM本身不支持容錯痰憎,但可以通過 myisamchk進(jìn)行故障恢復(fù)票髓。而且由于MyISAM是每張表使用各自獨立的存儲文件(MYD數(shù)據(jù)文件和MYI索引文件),使得備份及恢復(fù)十分方便(拷貝覆蓋即可)信殊,而且還支持在線恢復(fù)炬称。與其他存儲引擎比較,MyISAM具有檢查和修復(fù)表格的大多數(shù)工具. MyISAM表格可以被壓縮涡拘,而且它們支持全文(fulltext)搜索玲躯。它們不是事務(wù)安全的,而且也不支持外鍵所以如果你的應(yīng)用是不需要事務(wù),處理的只是基本的CRUD操作鳄乏,那么MyISAM是不二選擇跷车。
InnoDB被設(shè)計成適用于高并發(fā)讀寫的情況,使用MVCC(Multi-Version Concurrency Control)以及行級鎖來提供遵從ACID的事務(wù)支持橱野。InnoDB支持外鍵參照完整性朽缴,具備故障恢復(fù)能力。另外 InnoDB的性能其實還是不錯的水援,特別是在處理大數(shù)據(jù)量的情況下,用官方的話說就是: InnoDB的CPU效率是其他基于磁盤的關(guān)系數(shù)據(jù)庫存儲引擎所不能比的密强。不過InnoDB的備份恢復(fù)要麻煩一點,除非你使用了4.1以后版本提供的 Mulit-tablespace支持蜗元,因為InnoDB和MyISAM不同或渤,他的數(shù)據(jù)文件并不是獨立對應(yīng)于每張表的。而是使用的共享表空間奕扣,簡單的拷貝覆蓋方法對他不適用薪鹦,必須在停掉MYSQL后對進(jìn)行數(shù)據(jù)恢復(fù)。使用Per-Table Tablespacesd惯豆,使其每張表對應(yīng)一個獨立的表空間文件池磁,則情況要簡單很多。它與BDB類型具有相同的特性楷兽,它們還支持外鍵地熄。InnoDB表格速度很快,具有比BDB還豐富的特性,因此如果需要一個事務(wù)安全的存儲引擎芯杀,建議使用它离斩。
一般來說,如果需要事務(wù)支持瘪匿,并且有較高的并發(fā)讀寫頻率,InnoDB是不錯的選擇寻馏。要是并發(fā)讀寫頻率不高的話棋弥,其實可以考慮BDB,但由于在 MySQL5.1及其以后版本中诚欠,將不再提供BDB支持顽染。這個選項也就沒有了
InnoDB默認(rèn)情況下的事務(wù)是打開的(set autocommit = 0)就是說每插入一條記錄時候漾岳,InnoDB類型的表都會把它當(dāng)作一個單獨的事務(wù)來處理.所以如果我們插入了10000條記錄,而且沒有將事務(wù)關(guān)閉,那么 InnoDB類型的表會把它當(dāng)作10000個事務(wù)來處理粉寞,此時插入的總時間是很多的尼荆,這個時候一定要首先把事務(wù)關(guān)掉再插入,這樣的速度就很快了 至于Heap和BDB(Berkeley DB)唧垦,相對來說捅儒,普及率不如前兩種,但在有些情況下振亮,還是挺適用的Heap存儲引擎就是將數(shù)據(jù)存儲在內(nèi)存中巧还,由于沒有磁盤I/O的等待,速度極快坊秸。但由于是內(nèi)存存儲引擎麸祷,所做的任何修改在服務(wù)器重啟后都將消失。Heap挺適合做測試的時候使用BDB是MySQL第一款事務(wù)安全的存儲引擎褒搔。在Berkeley DB database library的基礎(chǔ)上建立阶牍,同樣是事務(wù)安全的,但BDB的普及率顯然不及InnoDB星瘾,因為大多數(shù)在MySQL中尋找支持事務(wù)的存儲引擎的同時也在找支 持MVCC或是行級鎖定存儲引擎走孽,而BDB只支持Page-level Lock。

屬性 MyISAM Heap BDB InnoDB
事務(wù) 不支持 不支持 支持 支持
鎖粒度 表鎖 表鎖 頁鎖(page, 8KB) 行鎖
存儲 拆分文件 內(nèi)存中 每個表一個文件 表空間
隔離等級 讀已提交 所有
可移植格式 N/A
引用完整性
數(shù)據(jù)主鍵
MySQL緩存數(shù)據(jù)記錄
可用性 全版本 全版本 MySQL-Max 全版本

一些細(xì)節(jié)上的差別:

  1. InnoDB不支持FULLTEXT類型的索引死相,MySQL5.6之后已經(jīng)支持(實驗性)融求。
  2. InnoDB中不保存表的 具體行數(shù),也就是說算撮,執(zhí)行select count() from table時生宛,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數(shù)即可肮柜。注意的是陷舅,當(dāng)count()語句包含 where條件時,兩種表的操作是一樣的审洞。

3.對于AUTO_INCREMENT類型的字段莱睁,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中芒澜,可以和其他字段一起建立聯(lián)合索引仰剿。
4.DELETE FROM table時,InnoDB不會重新建立表痴晦,而是一行一行的刪除南吮。
5.LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表誊酌,導(dǎo)入數(shù)據(jù)后再改成InnoDB表部凑,但是對于使用的額外的InnoDB特性(例如外鍵)的表不適用露乏。

另外,InnoDB表的行鎖也不是絕對的涂邀,如果在執(zhí)行一個SQL語句時MySQL不能確定要掃描的范圍瘟仿,InnoDB表同樣會鎖全表。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末比勉,一起剝皮案震驚了整個濱河市劳较,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌敷搪,老刑警劉巖兴想,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赡勘,居然都是意外死亡嫂便,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門闸与,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毙替,“玉大人,你說我怎么就攤上這事践樱〕Щ” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵拷邢,是天一觀的道長袱院。 經(jīng)常有香客問我,道長瞭稼,這世上最難降的妖魔是什么忽洛? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮环肘,結(jié)果婚禮上欲虚,老公的妹妹穿的比我還像新娘。我一直安慰自己悔雹,他們只是感情好复哆,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著腌零,像睡著了一般梯找。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上益涧,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天初肉,我揣著相機(jī)與錄音,去河邊找鬼。 笑死牙咏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嘹裂。 我是一名探鬼主播妄壶,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寄狼!你這毒婦竟也來了丁寄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泊愧,失蹤者是張志新(化名)和其女友劉穎伊磺,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體删咱,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡屑埋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了痰滋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摘能。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖敲街,靈堂內(nèi)的尸體忽然破棺而出团搞,到底是詐尸還是另有隱情,我是刑警寧澤多艇,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布逻恐,位于F島的核電站,受9級特大地震影響峻黍,放射性物質(zhì)發(fā)生泄漏复隆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一奸披、第九天 我趴在偏房一處隱蔽的房頂上張望昏名。 院中可真熱鬧,春花似錦阵面、人聲如沸轻局。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仑扑。三九已至,卻和暖如春置鼻,著一層夾襖步出監(jiān)牢的瞬間镇饮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工箕母, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留储藐,地道東北人俱济。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像钙勃,于是被迫代替她去往敵國和親蛛碌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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