1. 區別:
(1)事務處理:
MyISAM是非事務安全型的,而InnoDB是事務安全型的(支持事務處理等高級處理);
(2)鎖機制不同:
MyISAM是表級鎖,而InnoDB是行級鎖;
(3)select ,update ,insert ,delete 操作:
MyISAM:如果執行大量的SELECT,MyISAM是更好的選擇
InnoDB:如果你的數據執行大量的INSERT或UPDATE,出於性能方面的考慮,應該使用InnoDB表
(4)查詢表的行數不同:
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一致;雖然你的場景沒有,但他還是需要去檢查和維護
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)表更新和查詢都相當的頻繁,並且行鎖定的機會比較大的情況。