MySQL 獨特的可插拔儲存引擎架構,讓開發者能在 **表級** 選擇最適合的引擎。核心差異在於交易支援、鎖粒度、索引結構、資料持久性。
| 引擎 | 交易 | 鎖粒度 | 外鍵 | 全文索引 | 適用場景 |
|---|---|---|---|---|---|
| MyISAM | ❌ | 表鎖 | ❌ | ✅ (5.6+) | 讀多寫少、日誌、唯讀報表、全文搜尋 |
| InnoDB | ✅ ACID | 列鎖 | ✅ | ✅ (5.6+) | 核心業務、高併發寫入、需交易/外鍵 |
| MEMORY (HEAP) | ❌ | 表鎖 | ❌ | ❌ | 暫存運算、快速查找表、Session 快取(資料可重建) |
| MERGE | ❌ | 表鎖 | ❌ | ❌ | 邏輯合併多個同結構 MyISAM 表(資料倉儲分區) |
| Archive | ❌ | 表鎖 | ❌ | ❌ | 海量唯寫日誌、審計追蹤(高壓縮) |
| CSV | ❌ | 表鎖 | ❌ | ❌ | 與外部工具交換資料(純文字格式) |
-- 建表指定
CREATE TABLE t1 (id INT PRIMARY KEY, data VARCHAR(100)) ENGINE=InnoDB;
-- 變更現有表(會重建表,鎖表時間視資料量而定)
ALTER TABLE t1 ENGINE=InnoDB;
-- 核心訂單表:InnoDB
CREATE TABLE orders (...) ENGINE=InnoDB;
-- 商品全文搜尋表:MyISAM
CREATE TABLE products_ft (...) ENGINE=MyISAM;
-- 即時排行榜暫存表:MEMORY
CREATE TABLE ranking_tmp (...) ENGINE=MEMORY;
SHOW ENGINES; 查看)。JOIN 可能觸發隱性轉換效能問題,設計時儘量隔離。MEMORY 表重啟後資料消失,應用層需能自動重建。