一、MyISAM和InnoDB的區別有哪些?
1.InnoDB
支持事務,MyISAM
不支持。對於InnoDB
每一條SQL
語言都默認封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL
語言放在begin
和commit
之間,組成一個事務。
2.InnoDB
支持外鍵,而MyISAM
不支持。對一個包含外鍵的InnoDB
表轉為MYISAM
會失敗。
3.InnoDB
是聚集索引,數據文件是和索引綁在一起的,必須要有主鍵,通過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過主鍵查詢到數據。因此主鍵不應該過大,因為主鍵太大,其他索引也都會很大。而MyISAM
是非聚集索引,數據文件是分離的,索引保存的是數據文件的指針。主鍵索引和輔助索引是獨立的。
4.InnoDB
不保存表的具體行數,執行select count(*) from table
時需要全表掃描。而MyISAM
用一個變量保存了整個表的行數,執行上述語句時只需要讀出該變量即可,速度很快。
5.Innodb
不支持全文索引,而MyISAM
支持全文索引,查詢效率上MyISAM
要高。
二、如何選擇MyISAM和InnoDB?
1.是否要支持事務,如果要請選擇innodb
,如果不需要可以考慮MyISAM
。
2.如果表中絕大多數都只是讀查詢,可以考慮MyISAM
,如果既有讀寫也挺頻繁,請使用InnoDB
。
3.系統奔潰后,MyISAM
恢復起來更困難,能否接受。
4.MySQL5.5
版本開始Innodb
已經成為Mysql
的默認引擎(之前是MyISAM
),說明其優勢是有目共睹的,如果你不知道用什么,那就用InnoDB
,至少不會差。
相關Mysql文章如下: