MyISAM:每一個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。.frm文件存儲表定義。數據文件的擴展名爲.MYD (MYData)。索引文件的擴展名是.MYI (MYIndex)。
InnoDB:全部的表都保存在同一個數據文件中(也多是多個文件,或者是獨立的表空間文件),InnoDB表的大小隻受限於操做系統文件的大小,通常爲2GB。存儲爲兩個文件 .frm .ibdmysql
MyISAM:可被壓縮,存儲空間較小。支持三種不一樣的存儲格式:靜態表(默認,可是注意數據末尾不能有空格,會被去掉)、動態表、壓縮表。
InnoDB:須要更多的內存和存儲,它會在主內存中創建其專用的緩衝池用於高速緩衝數據和索引。sql
MyISAM:數據是以文件的形式存儲,因此在跨平臺的數據轉移中會很方便。在備份和恢復時可單獨針對某個表進行操做。
InnoDB:免費的方案能夠是拷貝數據文件、備份binlog,或者用mysqldump,在數據量達到幾十G的時候就相對痛苦了。數據庫
MyISAM:強調的是性能,每次查詢具備原子性,其執行數度比InnoDB類型更快,可是不提供事務支持。
InnoDB:提供事務支持事務,具備事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表。緩存
MyISAM:能夠和其餘字段一塊兒創建聯合索引。引擎的自動增加列必須是索引,若是是組合索引,自動增加能夠不是第一列,他能夠根據前面幾列進行排序後遞增。
InnoDB:InnoDB中必須包含只有該字段的索引。引擎的自動增加列必須是索引,若是是組合索引也必須是組合索引的第一列。安全
MyISAM:只支持表級鎖,用戶在操做myisam表時,select,update,delete,insert語句都會給表自動加鎖,若是加鎖之後的表知足insert併發的狀況下,能夠在表的尾部插入新的數據。
InnoDB:支持事務和行級鎖,是innodb的最大特點。行鎖大幅度提升了多用戶併發操做的新能。可是InnoDB的行鎖,只是在WHERE的主鍵是有效的,非主鍵的WHERE都會鎖全表的。併發
MyISAM:支持 FULLTEXT類型的全文索引
InnoDB:不支持FULLTEXT類型的全文索引,可是innodb可使用sphinx插件支持全文索引,而且效果更好。性能
MyISAM:容許沒有任何索引和主鍵的表存在,索引都是保存行的地址。
InnoDB:若是沒有設定主鍵或者非空惟一索引,就會自動生成一個6字節的主鍵(用戶不可見),數據是主索引的一部分,附加索引保存的是主索引的值。操作系統
MyISAM:保存表的總行數,若是select count(*) from table;會直接取出出該值。
InnoDB:沒有保存表的總行數,若是使用select count(*) from table;就會遍歷整個表,消耗至關大,可是在加了wehre條件後,myisam和innodb處理的方式都同樣。插件
MyISAM:若是執行大量的SELECT,MyISAM是更好的選擇。
InnoDB:若是你的數據執行大量的INSERT或UPDATE,出於性能方面的考慮,應該使用InnoDB表。DELETE 從性能上InnoDB更優,但DELETE FROM table時,InnoDB不會從新創建表,而是一行一行的刪除,在innodb上若是要清空保存有大量數據的表,最好使用truncate table這個命令。排序
MyISAM:不支持,InnoDB:支持
MyISAM:默認的MySQL插件式存儲引擎。若是應用是以讀操做和插入操做爲主,只有不多的更新和刪除操做,而且對事務的完整性、併發性要求不是很高,那麼選擇這個存儲引擎是很是適合的。MyISAM是在Web、數據倉儲和其餘應用環境下最常使用的存儲引擎之一。
InnoDB:用於事務處理應用程序,支持外鍵。若是應用對事務的完整性有比較高的要求,在併發條件下要求數據的一致性,數據操做除了插入和查詢之外,還包括不少的更新、刪除操做,那麼InnoDB存儲引擎應該是比較合適的選擇。InnoDB存儲引擎除了有效地下降因爲刪除和更新致使的鎖定,還能夠確保事務的完整提交(Commit)和回滾(Rollback),對於相似計費系統或者財務系統等對數據準確性要求比較高的系統,InnoDB都是合適的選擇。
MEMORY:將全部數據保存在 RAM 中,在須要快速定位記錄和其餘相似數據的環境下,可提供極快的訪問。MEMORY 的缺陷是對錶的大小有限制,太大的表沒法緩存在內存中,其次是要確保表的數據能夠恢復,數據庫異常終止後表中的數據是能夠恢復的。MEMORY表一般用於更新不太頻繁的小表,用以快速獲得訪問結果。