引擎概覽
| 引擎 | 特點 | 適用場景 |
| ISAM | 讀快、資源少、無事務、無容錯(崩潰不可恢復) | 唯讀/多讀少寫、非關鍵數據 |
| MyISAM | ISAM擴展、預設引擎、表鎖優化並發、需定期 OPTIMIZE TABLE、修復/壓縮工具豐富 | Web 多讀少寫、虛擬主機常限用此引擎 |
| HEAP (MEMORY) | 純內存表、極快、重啟丟失、刪除不浪費空間 | 臨時計算、中間結果、查詢緩存 |
| InnoDB | 支援事務/外鍵/行鎖、較慢、崩潰可恢復 | 關鍵業務、高併發寫入、需 ACID |
| BDB (BerkeleyDB) | 支援事務/頁鎖、較慢 | 需事務但不想用 InnoDB 時 |
創建表時指定引擎
CREATE TABLE tblMyISAM (id INT PRIMARY KEY AUTO_INCREMENT, value_a TINYINT) ENGINE=MyISAM;
CREATE TABLE tblISAM (...) ENGINE=ISAM;
CREATE TABLE tblHeap (...) ENGINE=HEAP;
線上遷移引擎
ALTER TABLE tblMyISAM ENGINE=InnoDB;
-- 三步:建副本 → 排隊變更 → 切換刪舊
快捷轉換工具
# 僅 ISAM → MyISAM
mysql_convert_table_format
查看表引擎
SHOW TABLE STATUS FROM db_name; -- Type 欄位
SHOW CREATE TABLE tbl_name; -- ENGINE=xxx
避坑指南
- 引擎未編譯/啟用時 MySQL 靜默回退預設 MyISAM,不報錯 → 必須
SHOW TABLE STATUS 驗證
- 表級引擎選擇 = 針對性能調優:事務表用 InnoDB,日誌/緩存表用 MyISAM/HEAP
- 自定義引擎可用 MySQL++ API 開發(進階)