作者:Oscarwin
鏈接:https://www.zhihu.com/question/20596402/answer/211492971
來源:知乎
著作權(quán)歸作者所有男韧。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)肝集,非商業(yè)轉(zhuǎn)載請注明出處。
區(qū)別:
InnoDB支持事務(wù),MyISAM不支持仇轻,對于InnoDB每一條SQL語言都默認(rèn)封裝成事務(wù),自動提交,這樣會影響速度别凹,所以最好把多條SQL語言放在begin和commit之間,組成一個事務(wù)洽糟;
InnoDB支持外鍵炉菲,而MyISAM不支持。對一個包含外鍵的InnoDB表轉(zhuǎn)為MYISAM會失斃だ!拍霜;
InnoDB是聚集索引,數(shù)據(jù)文件是和索引綁在一起的薪介,必須要有主鍵祠饺,通過主鍵索引效率很高。但是輔助索引需要兩次查詢汁政,先查詢到主鍵道偷,然后再通過主鍵查詢到數(shù)據(jù)。因此记劈,主鍵不應(yīng)該過大勺鸦,因?yàn)橹麈I太大,其他索引也都會很大抠蚣。而MyISAM是非聚集索引祝旷,數(shù)據(jù)文件是分離的,索引保存的是數(shù)據(jù)文件的指針嘶窄。主鍵索引和輔助索引是獨(dú)立的怀跛。
InnoDB不保存表的具體行數(shù),執(zhí)行select count(*) from table時需要全表掃描柄冲。而MyISAM用一個變量保存了整個表的行數(shù)吻谋,執(zhí)行上述語句時只需要讀出該變量即可,速度很快现横;
Innodb不支持全文索引漓拾,而MyISAM支持全文索引,查詢效率上MyISAM要高戒祠;
如何選擇:
是否要支持事務(wù)骇两,如果要請選擇innodb,如果不需要可以考慮MyISAM姜盈;
如果表中絕大多數(shù)都只是讀查詢低千,可以考慮MyISAM,如果既有讀寫也挺頻繁馏颂,請使用InnoDB示血。
系統(tǒng)奔潰后棋傍,MyISAM恢復(fù)起來更困難,能否接受难审;
MySQL5.5版本開始Innodb已經(jīng)成為Mysql的默認(rèn)引擎(之前是MyISAM)瘫拣,說明其優(yōu)勢是有目共睹的,如果你不知道用什么告喊,那就用InnoDB麸拄,至少不會差。