MySQL 獨創的**插件式存儲引擎架構**讓單個數據庫實例能同時支撐多種存儲格式。SHOW ENGINES 列出的 8 款內建引擎,加上十幾款第三方引擎,覆蓋從 OLTP 到 OLAP、從嵌入式到分布式的全谱系。本文系統對比核心引擎特性,給出生產環境選型決策樹。
SHOW ENGINES\G SHOW VARIABLES LIKE 'storage_engine'; -- 5.5+ 默認 InnoDB
修改默認引擎:my.cnf 中 default-storage-engine=MyISAM 後重啟。
| 特性 | InnoDB | MyISAM | MEMORY | ARCHIVE | CSV |
|---|---|---|---|---|---|
| 事務 (ACID) | ✅ 支援 | ❌ 不支援 | ❌ 不支援 | ❌ 不支援 | ❌ 不支援 |
| 行級鎖 | ✅ | ❌ 表級鎖 | ❌ 表級鎖 | ❌ 表級鎖 | ❌ 表級鎖 |
| 外鍵 | ✅ 唯一支援 | ❌ | ❌ | ❌ | ❌ |
| 全文索引 | 5.6+ ✅ | ✅ | ❌ | ❌ | ❌ |
| 壓縮存儲 | ✅ (頁壓縮/表壓縮) | ✅ (myisampack) | ❌ | ✅ 極高壓縮比 | ✅ 文本天然壓縮 |
| 崩潰恢復 | ✅ Redo/Undo Log | ❌ 需手動 REPAIR | ❌ 重啟數據全失 | ❌ | ❌ |
| 熱備份 | ✅ (xtrabackup) | ❌ | ❌ | ❌ | ✅ 複製文件即可 |
| 適用場景 | 核心業務、高併發、需事務 | 只讀/多讀少寫、日誌、非關鍵 | 臨時表、查找映射、緩存 | 歸檔日誌、寫一次讀少 | 數據交換、導入導出 |
innodb_file_per_table=1,每表一個 .ibd,便於管理、回收空間、傳輸。註:列式引擎本質屬於 NewSQL/NoSQL 範疇,語法兼容 MySQL 但語義有差異,選型需 PoC 驗證。
| 業務類型 | 推薦引擎 | 備選/補充 |
|---|---|---|
| 電商訂單、金融賬戶、核心交易 | InnoDB | XtraDB、Galera Cluster 多主 |
| 論壇帖子、CMS 內容、日誌審計 | MyISAM / InnoDB | 全文搜尋上 Sphinx/ES |
| 海量日誌、IoT 時序歸檔 | ARCHIVE / TokuDB / ClickHouse | 分區表 + 壓縮 |
| 會話緩存、查找表、中間結果 | MEMORY / Redis(外部) | 重啟丟數據可接受 |
| 異構數據導入導出、ETL 中轉 | CSV | 外部表/ODBC |
存儲引擎無絕對優劣,只有「是否匹配業務特徵」。**InnoDB 覆蓋 90% 以上 OLTP 場景**是鐵律;其餘 10% 用 ARCHIVE 存日誌、MEMORY 做緩存、Spider 分片、列式引擎跑 OLAP。下次建表前問自己三個問題:要事務嗎?要熱備嗎?能接受崩潰丟數據嗎?答案即引擎。