MySQL 獨特的架構允許資料表層級指定儲存引擎。如同賽車按鈕換引擎,你可以根據資料特性為每張表選擇最適合的引擎。
| 引擎 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| MyISAM (預設) | 讀取極快、全文索引、壓縮唯讀表、資源佔用低 | 不支援交易、表級鎖定寫入並發差、崩潰易損壞 | 讀多寫少、Web 內容管理、日誌分析、唯讀報表 |
| InnoDB | 支援 ACID 交易、行級鎖定、外鍵約束、崩潰自動恢復 | 寫入較慢、空間佔用大、無全文索引(5.6 前) | 訂單、金流、庫存、任何需資料一致性的核心業務 |
| MEMORY (HEAP) | 全記憶體操作、極高速度 | 重啟資料消失、不支援 BLOB/TEXT、表級鎖 | 暫存表、快取查詢結果、Session 暫存、查詢中介表 |
| MERGE (MRG_MyISAM) | 將多個同結構 MyISAM 表視為一個邏輯表 | 僅支援 MyISAM、無交易 | 分區式日誌、歷史資料歸檔查詢 |
| Archive | 高壓縮、僅支援 INSERT/SELECT | 無索引、無 UPDATE/DELETE | 大量唯寫日誌、稽核軌跡 |
| CSV | 以 CSV 文字檔儲存、可直接用試算軟體開啟 | 無索引、效能低 | 資料交換、外部系統匯入匯出 |
CREATE TABLE t_myisam (id INT PRIMARY KEY, val INT) ENGINE=MyISAM;
CREATE TABLE t_innodb (id INT PRIMARY KEY, val INT) ENGINE=InnoDB;
CREATE TABLE t_heap (id INT PRIMARY KEY, val INT) ENGINE=MEMORY;
ALTER TABLE t_myisam ENGINE=InnoDB;
MySQL 會建立新表副本、重放變更、切換並刪除舊表(線上 DDL 5.6+ 可減少鎖定時間)。
mysql_convert_table_format --user=root --password=xxx --host=localhost db_name
SHOW TABLE STATUS FROM db_name LIKE 't_%';
-- 或
SHOW CREATE TABLE t_myisam;
結果中 Engine 欄位即為目前引擎。
若內建引擎無法滿足需求,可使用 MySQL++ API 開發自訂儲存引擎(如原生 XML 提供者、特殊索引結構)。此為核心開發者領域,需深入了解 handler 介面。
同一資料庫不同表可用不同引擎:核心交易表用 InnoDB、靜態查詢表用 MyISAM、暫存中介表用 MEMORY。靈活性才是 MySQL 最大優勢。