mysql 中 myisam 和 innodb 的區(qū)別

作者:Oscarwin
鏈接:https://www.zhihu.com/question/20596402/answer/211492971
來(lái)源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

區(qū)別:

  1. InnoDB支持事務(wù),MyISAM不支持,對(duì)于InnoDB每一條SQL語(yǔ)言都默認(rèn)封裝成事務(wù),自動(dòng)提交,這樣會(huì)影響速度,所以最好把多條SQL語(yǔ)言放在begin和commit之間,組成一個(gè)事務(wù);

  2. InnoDB支持外鍵,而MyISAM不支持。對(duì)一個(gè)包含外鍵的InnoDB表轉(zhuǎn)為MYISAM會(huì)失??;

  3. InnoDB是聚集索引,數(shù)據(jù)文件是和索引綁在一起的,必須要有主鍵,通過(guò)主鍵索引效率很高。但是輔助索引需要兩次查詢(xún),先查詢(xún)到主鍵,然后再通過(guò)主鍵查詢(xún)到數(shù)據(jù)。因此,主鍵不應(yīng)該過(guò)大,因?yàn)橹麈I太大,其他索引也都會(huì)很大。而MyISAM是非聚集索引,數(shù)據(jù)文件是分離的,索引保存的是數(shù)據(jù)文件的指針。主鍵索引和輔助索引是獨(dú)立的。

  4. InnoDB不保存表的具體行數(shù),執(zhí)行select count(*) from table時(shí)需要全表掃描。而MyISAM用一個(gè)變量保存了整個(gè)表的行數(shù),執(zhí)行上述語(yǔ)句時(shí)只需要讀出該變量即可,速度很快;

  5. Innodb不支持全文索引,而MyISAM支持全文索引,查詢(xún)效率上MyISAM要高;

如何選擇:

  1. 是否要支持事務(wù),如果要請(qǐng)選擇innodb,如果不需要可以考慮MyISAM;

  2. 如果表中絕大多數(shù)都只是讀查詢(xún),可以考慮MyISAM,如果既有讀寫(xiě)也挺頻繁,請(qǐng)使用InnoDB。

  3. 系統(tǒng)奔潰后,MyISAM恢復(fù)起來(lái)更困難,能否接受;

  4. MySQL5.5版本開(kāi)始Innodb已經(jīng)成為Mysql的默認(rèn)引擎(之前是MyISAM),說(shuō)明其優(yōu)勢(shì)是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不會(huì)差。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容