MyISAM:
- MySQL默認數據庫引擎,不支持事務、外鍵,速度快,用於無事務要求或者select、insert為主的場景。
- 會創建3個文件.frm(存儲表定義),.MYD(MYData,存儲數據),.MYI(MYIndex,存儲引擎)。
- 支持3中存儲格式,靜態(固定長度)表,動態表,壓縮表。
- 靜態表是默認格式,固定長度速度快,但是占空間大。記錄長度不夠時會用空格填充,讀取數據時會清除空格,存在吃尾部空格的情況。
- 動態表包含變長字段,記錄不是固定長度,占用空間少,但是頻繁更新和刪除會產生隨便,需要定期整理,並且在出現故障時恢復比較困難。
- 壓縮表由mysiampack工具創建,空間小。
InnoDB:
- 提供了具有提交、回滾、崩潰恢復能力的事務安全,但是會占用更多空間用以保存數據和索引。
- 支持外鍵,創建外鍵的時候,要求父表必須有對應的碎銀,子表在創建索引的時候也會自動創建對應的索引。
- 存儲表和索引有兩種方式,
- 使用共享表空間存儲,表結構保存在.frm文件中,數據和索引在innodb_data_home_dir和innodb_data_file_path定義的表空間中,可以是多個文件。
- 使用多表空間存儲,表結構保存在.frm文件中,每個表的數據和索引單獨保存在.ibd中。
MEMORY:
- 使用存在於內存中的內容來創建表,訪問速度快,默認使用HASH索引,服務關閉數據會丟失。
- 用於內容變化不頻繁的代碼表,或者作為統計操作的中間結果表。
MERGE:
- 一組MyISAM表的組合,這些表必須結構完全相同。
- MERGE表本身沒有數據,CRUD時其實操作的是內部的MyISAM表。
- Drop只是刪除MERGE的定義,對於內部表沒有影響。