MySQL 允許在 CREATE TABLE 或 ALTER TABLE 中指定 ENGINE(舊版為 TYPE),實現「不停機換引擎」:
CREATE TABLE tbl_heap (id INT PRIMARY KEY, val TINYINT) ENGINE=MEMORY;
CREATE TABLE tbl_myisam (id INT PRIMARY KEY, val TINYINT) ENGINE=MYISAM;
CREATE TABLE tbl_innodb (id INT PRIMARY KEY, val TINYINT) ENGINE=INNODB;
ALTER TABLE tbl_myisam ENGINE=InnoDB;
MySQL 內部三步走:
⚠ 大表遷移會鎖表,建議:
pt-online-schema-change (Percona Toolkit) 實現無鎖遷移SHOW TABLE STATUS LIKE 'tbl_name'\G
-- 關鍵欄位:Engine
SHOW CREATE TABLE tbl_name\G
-- 輸出建表語句,含 ENGINE=xxx
| 業務特徵 | 推薦引擎 | 理由 |
|---|---|---|
| 純讀多寫少、全文搜尋、無事務需求 | MyISAM | 讀取極快、壓縮表、全文索引 |
| 需事務(ACID)、行級鎖、外鍵、高併發寫入 | InnoDB | 行級鎖、MVCC、崩潰恢復、預設引擎 |
| 臨時中間表、極速讀寫、資料可丟失 | MEMORY (HEAP) | 全內存、無持久化、重啟數據消失 |
| 歸檔日誌、僅追加寫入、壓縮存儲 | Archive | 高壓縮、不支援索引/更新 |
同一資料庫不同表可用不同引擎:
這正是 MySQL「插拔式引擎」架構的最大價值:按表級精準匹配業務需求,而非全庫妥協。