MySQL 採用插拔式儲存引擎架構,不同引擎針對不同負載優化。選型時不必全庫統一,可依據各表業務特性混合使用。本文系統整理八大主流引擎特性、核心差異與選型決策矩陣。
一、引擎分類總覽
| 類別 | 引擎 | 核心特性 |
| 非事務型 | MyISAM | 預設引擎、高速讀寫、全文搜尋、表級鎖 |
| MEMORY (HEAP) | 資料駐留記憶體、極速查找、重啟資料消失 |
| MERGE | 邏輯合併多個同結構 MyISAM 表、適合 VLDB 數據倉儲 |
| 事務型 | InnoDB | ACID 交易、行級鎖、外鍵、MVCC、預設 5.1+ 內建 |
| BDB | 頁級鎖、COMMIT/ROLLBACK、僅特定 OS 支援 |
| 特殊用途 | ARCHIVE | 高壓縮、無索引、適合海量歷史/稽核日誌 |
| CSV | 逗號分隔文字檔、便於外部工具交換 |
| BLACKHOLE | 寫入不儲存、讀取永回空集、適合複寫過濾/效能測試 |
| FEDERATED | 遠端資料庫映射、跨實例邏輯整合、分散式環境適用 |
| NDB Cluster | 分散式叢集、高可用、高效能查找、Linux/Solaris/Mac 支援 |
| 其他 | EXAMPLE | 存根引擎、教學示範如何開發新引擎 |
二、建立表時指定引擎
CREATE TABLE t (i INT) ENGINE = INNODB;
CREATE TABLE t (i INT) TYPE = MEMORY; -- 5.1 仍支援但 ENGINE 為首選術語
三、核心引擎深度對比
1. MyISAM:傳統預設選擇
- 優勢:全文索引、壓縮唯讀表、
COUNT(*) 極快(儲存行數)
- 劣勢:無交易、表級鎖寫入並發差、崩潰易損壞需修復
- 適用:讀多寫少、全文搜尋、數據倉儲唯讀表
2. InnoDB:交易處理首選
- 優勢:ACID、行級鎖高並發、外鍵完整性、崩潰安全恢復、MVCC 讀不阻寫
- 劣勢:寫入開銷較大、無全文索引(5.6+ 已支援)、空間佔用較大
- 適用:OLTP、高並發寫入、需外鍵/交易的核心業務表
3. MEMORY:極速查找暫存
- 優勢:全記憶體、無 I/O 延遲、適合查找表、快取層
- 劣勢:重啟資料消失、表級鎖、不支援 BLOB/TEXT、大小受
max_heap_table_size 限制
- 適用:暫存中間結果、查找字典、Session 快取
4. ARCHIVE:海量歸檔
- 優勢:高壓縮率(約 1/10)、插入極快、無索引開銷
- 劣勢:無索引、不支援 UPDATE/DELETE、全表掃描慢
- 適用:歷史日誌、稽核軌跡、合規存儲
5. FEDERATED:跨實例整合
- 優勢:邏輯整合多物理實例、無需 ETL 同步
- 劣勢:遠端查詢延遲高、無索引下推、單點故障風險
- 適用:分散式數據集市、跨區域唯讀查詢
6. NDB Cluster:高可用叢集
- 優勢:自動分區、同步複寫、99.999% 可用性、線性擴展
- 劣勢:複雜部署、Join 效能弱、記憶體成本高
- 適用:電信級計費、即時競價、高頻交易核心系統
四、選型決策矩陣
| 業務特徵 | 推薦引擎 | 備選方案 |
| 核心交易、高並發寫入、需外鍵 | InnoDB | BDB |
| 讀多寫少、全文搜尋、報表分析 | MyISAM | InnoDB 5.6+ |
| 極速查找、資料可重建 | MEMORY | Redis 外部快取 |
| 海量唯寫日誌、合規存儲 | ARCHIVE | 分區表 + 壓縮 |
| 跨實例邏輯整合 | FEDERATED | 應用層聚合 |
| 高可用叢集、自動分區 | NDB Cluster | InnoDB + MHA/Galera |
五、關鍵原則
單一資料庫方案中,不同表可使用不同儲存引擎,依據各表存取模式與業務需求獨立選型,才能發揮最大效能。