MySQL 的插件式儲存引擎架構讓開發者能根據業務特性選擇最適合的底層儲存方式。本文系統整理主流引擎核心特性對比、適用場景及選型決策樹,助您在架構設計階段做出最優決策。
| 特性 | MyISAM | InnoDB | Memory | Archive |
|---|---|---|---|---|
| 儲存上限 | 無 | 64 TB | 受限記憶體 | 無 |
| 事務支援 | ✗ | ✓ (ACID) | ✗ | ✗ |
| 鎖粒度 | 表鎖 | 行鎖 | 表鎖 | 行鎖 |
| B-Tree 索引 | ✓ | ✓ | ✓ | ✗ |
| 全文索引 | ✓ (5.6+) | ✓ (5.6+) | ✗ | ✗ |
| 叢集索引 | ✗ | ✓ | ✗ | ✗ |
| 資料壓縮 | ✓ | ✓ (Barracuda) | ✗ | ✓ |
| 空間效率 | 低 | 高 | N/A | 極高 |
| 記憶體佔用 | 低 | 高 | 中 | 低 |
| 批量插入速度 | 高 | 中 | 極高 | 極高 |
| 外鍵約束 | ✗ | ✓ | ✗ | ✗ |
.frm(定義)、.MYD(資料)、.MYI(索引),支援資料/索引分離存放分散 I/O。myisampack)、修復工具完善 (myisamchk)。COUNT(*) 需全表掃描。單一實例內不同表可指定不同引擎:
CREATE TABLE orders (...) ENGINE=InnoDB; CREATE TABLE access_logs (...) ENGINE=Archive; CREATE TABLE lookup_codes (...) ENGINE=Memory;
配合 innodb_file_per_table=ON 獨立表空間,便於單表備份、遷移、碎片整理。
REPAIR TABLE 可能丟資料,InnoDB 依賴 Redo Log 自動恢復更可靠。ENGINE=InnoDB 避免踩坑。理解儲存引擎特性是 MySQL 架構優化的基石。核心業務首選 InnoDB,輔以 Archive 歸檔、Memory 熱點查找,構建分層儲存體系,在一致性、效能、成本間取得最佳平衡。