轉自:https://www.cnblogs.com/changna1314/p/6878900.htmlhtml
1. 區別:緩存
(1)事務處理:安全
MyISAM是非事務安全型的,而InnoDB是事務安全型的(支持事務處理等高級處理);併發
(2)鎖機制不一樣:性能
MyISAM是表級鎖,而InnoDB是行級鎖;spa
(3)select ,update ,insert ,delete 操做:htm
MyISAM:若是執行大量的SELECT,MyISAM是更好的選擇
InnoDB:若是你的數據執行大量的INSERT或UPDATE,出於性能方面的考慮,應該使用InnoDB表
(4)查詢表的行數不一樣:blog
MyISAM:select count(*) from table,MyISAM只要簡單的讀出保存好的行數,注意的是,當count(*)語句包含
where條件時,兩種表的操做是同樣的
InnoDB : InnoDB 中不保存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行
(5)外鍵支持:
mysiam表不支持外鍵,而InnoDB支持
2. 爲何MyISAM會比Innodb 的查詢速度快。索引
INNODB在作SELECT的時候,要維護的東西比MYISAM引擎多不少;
1)數據塊,INNODB要緩存,MYISAM只緩存索引塊, 這中間還有換進換出的減小;
2)innodb尋址要映射到塊,再到行,MYISAM 記錄的直接是文件的OFFSET,定位比INNODB要快
3)INNODB還須要維護MVCC一致;雖然你的場景沒有,但他仍是須要去檢查和維護
MVCC ( Multi-Version Concurrency Control )多版本併發控制
3. 應用場景
MyISAM適合:(1)作不少count 的計算;(2)插入不頻繁,查詢很是頻繁;(3)沒有事務。事務
InnoDB適合:(1)可靠性要求比較高,或者要求事務;(2)表更新和查詢都至關的頻繁,而且行鎖定的機會比較大的狀況。