存儲引擎決定了表的儲存方式、索引結構、鎖粒度、事務支援等核心特性。MySQL 5.5 起預設引擎為 InnoDB,但理解各引擎差異對遷移、混合部署、舊系統維護至關重要。
| 特性 | MyISAM | InnoDB | NDB Cluster |
|---|---|---|---|
| 事務支援 | ❌ | ✅ ACID | ✅ 分佈式事務 |
| 鎖粒度 | 表鎖 | 行鎖 | 行鎖(分佈式) |
| 外鍵約束 | ❌ | ✅ | ✅ |
| 全文索引 | ✅ (5.6+) | ✅ (5.6+) | ❌ |
| 空間索引 | ✅ | ✅ (5.7+) | ❌ |
| 崩潰恢復 | 慢、易損壞 | Redo/Undo Log 快速 | 節點故障自動轉移 |
| MVCC | ❌ | ✅ | ✅ |
| 壓縮表 | ✅ | ✅ (透明頁壓縮) | ❌ |
| 適用場景 | 只讀/日志/非關鍵 | OLTP 核心業務 | 高可用分佈式集群 |
需要事務/行鎖/外鍵/高並發寫入?
├─ 是 → InnoDB (默認首選)
└─ 否 → 數據量大、只讀、全文搜索?
├─ 是 → MyISAM 或 InnoDB (5.6+ 全文)
└─ 否 → 臨時/緩存/中間結果?
├─ 是 → Memory
└─ 否 → 日志歸檔/極少讀取?
├─ 是 → Archive
└─ 否 → InnoDB (通用兜底)
-- 查看表引擎 SHOW TABLE STATUS LIKE 't1'\G -- 修改引擎 (會重建表) ALTER TABLE t1 ENGINE=InnoDB;
InnoDB 是現代 MySQL 的絕對主角,集事務、行鎖、MVCC、崩潰安全、線上變更於一身。除非有極其明確的只讀/歸檔/緩存場景,默認選 InnoDB 絕不會錯。