引擎總覽
| 引擎 | 支援版本 | 核心定位 | 交易支援 | 外鍵支援 | 鎖粒度 |
| ISAM |
早期版本(已淘汰) |
舊版預設,唯讀密集 |
❌ |
❌ |
表鎖 |
| MyISAM |
3.23+(5.5 前預設) |
ISAM 增強版,全文索引、壓縮表 |
❌ |
❌ |
表鎖 |
| HEAP / MEMORY |
3.23+ |
純記憶體暫存表,極速查詢 |
❌ |
❌ |
表鎖 |
| InnoDB |
3.23+(5.5+ 預設) |
交易型、行鎖、外鍵、MVCC |
✅ ACID |
✅ |
行鎖 |
| BDB (BerkeleyDB) |
3.23+(已淘汰) |
早期交易引擎 |
✅ |
✅ |
頁鎖 |
ISAM(Indexed Sequential Access Method)
- 設計哲學:針對「讀多寫少」優化,讀取極快、記憶體佔用低。
- 缺陷:不支援交易、不支援外鍵、無容錯能力(磁碟損壞資料無法恢復)。
- 現狀:已被 MyISAM 完全取代,現代 MySQL 版本不再支援。
MyISAM(My Indexed Sequential Access Method)
核心優勢
- 全文索引(
FULLTEXT)支援,早期全文搜尋首選。
- 表壓縮(
myisampack)大幅減少儲存空間,適合唯讀歸檔資料。
myisamchk 修復工具可修復損壞索引/資料檔。
- 表鎖機制優化並發讀取(並發插入支援)。
劣勢與維護
- 無交易支援,崩潰易導致資料不一致。
- 頻繁 UPDATE/DELETE 產生碎片,需定期
OPTIMIZE TABLE 整理。
- 表鎖導致寫入併發極低,不適合高寫入場景。
適用場景
- Web 內容管理(文章、部落格、靜態頁面)——讀多寫少。
- 資料倉儲唯讀查詢、報表分析。
- 全文搜尋(若未引入 Elasticsearch)。
HEAP / MEMORY
特性
- 資料 100% 駐留記憶體,存取速度極快(比 MyISAM/InnoDB 快數倍)。
- 支援 Hash 索引(精確查找極快)與 B-Tree 索引(範圍查詢)。
- 易失性:重啟/關機資料消失,僅適合暫存/快取。
- 固定長度列(VARCHAR 實際按 CHAR 分配),記憶體利用率較低。
- 不支援 BLOB/TEXT、AUTO_INCREMENT(早期版本)。
適用場景
- 臨時中間結果表(複雜查詢分步驟)。
- 查詢快取層(如權限對照表、配置表)。
- Session 存儲(配合定期持久化)。
使用警示
-- 用完必須手動刪除,否則佔用記憶體不釋放
DROP TABLE tmp_session_cache;
InnoDB 與 BDB:交易引擎雙雄(歷史視角)
- InnoDB:Oracle 收購後持續強化,行鎖+MVCC 實現高併發交易,現代 MySQL 絕對主流預設引擎。
- BDB:Sleepycat 開發,頁鎖架構,早期交易支援先驅,現已從 MySQL 移除。
- 選型鐵律:需交易/外鍵/高併發寫入 → InnoDB 一択。
引擎選型決策樹
需要 ACID 交易?
├─ 是 → InnoDB(唯一選擇)
└─ 否
├─ 需全文搜尋? → MyISAM(或升級 InnoDB 5.6+ FULLTEXT / 引入 ES)
├─ 純暫存/快取/極速查詢? → MEMORY(資料可重建)
├─ 唯讀歸檔/壓縮存儲? → MyISAM + myisampack
└─ 一般用途/不確定? → InnoDB(預設最安全)
查看與修改引擎
-- 查看表引擎
SHOW TABLE STATUS LIKE 'table_name'\G
-- Engine: InnoDB
-- 修改引擎(會重建表,大表耗時久、鎖表)
ALTER TABLE table_name ENGINE = InnoDB;
-- 查看支援引擎
SHOW ENGINES;