在 MySQL 建表語句 CREATE TABLE ... ENGINE=... 中,存儲引擎的選擇直接決定了數據的存儲方式、索引結構、鎖粒度、事務支援及性能表現。最常見的兩大引擎——**InnoDB** 與 **MyISAM**,各有千秋。本文從事務、鎖機制、數據操作、存儲架構四個維度深度解析,助你做出正確選型。
| 操作類型 | InnoDB | MyISAM | 說明 |
|---|---|---|---|
| 增刪改 (DML) | ✅ 優勢明顯 | ❌ 全表鎖 | 行級鎖 + 變更緩衝 |
| 大量查詢 (SELECT) | 良好 | ✅ 略勝一籌 | MyISAM 只緩存索引,查詢路徑短 |
| COUNT(*) | ❌ 全表掃描 | ✅ 瞬時返回 | MyISAM 維護表行數計數器 |
| 緩存策略 | 緩存數據頁 + 索引頁 | 僅緩存索引塊 | InnoDB Buffer Pool 更大更複雜 |
| 索引尋址 | 邏輯地址映射 | 物理偏移量 | InnoDB 遷移數據無需重建索引 |
ibdata1、ibd)。table_name.frm # 表結構定義
table_name.MYD # 數據文件
table_name.MYI # 索引文件
OPTIMIZE TABLE。InnoDB 以事務、行鎖、MVCC 成為 **OLTP 核心業務首選**;MyISAM 以輕量、全表計數、全文索引(舊版本)服務於 **OLAP/歸檔/唯讀** 場景。現代架構中,除非有極特殊理由,**InnoDB 應為默認選擇**。