MySQL 獨特的插件式存儲引擎架構,讓開發者能按業務場景為每張表選擇最適合的引擎。本文系統介紹主流引擎特性、查看修改指令、適用場景選型表,助您做出正確架構決策。
存儲引擎 = 如何存儲數據、如何建立索引、如何更新查詢數據的技術實現方法。
關係型資料庫以表形式存儲,故亦稱「表類型」。
MySQL 支援多引擎並存、表級指定、甚至自行開發引擎——這是區別於 Oracle/SQL Server 的核心特性。
| 引擎 | 核心定位 | 支援特性 | 不支援/限制 | 典型場景 |
|---|---|---|---|---|
| MyISAM | 早期預設、高速讀取、全文索引 | 表鎖、壓縮表、全文索引、空間索引 | ❌ 交易、行鎖、外鍵、崩潰安全 | 唯讀/讀多寫少、日誌、數據倉庫、全文搜尋 |
| MyISAM 變體 | - | 靜態(固定長度)、動態(變長)、壓縮(myisampack) | 動態表易碎片、壓縮表唯讀 | 按列長度特性自動選擇 |
| MERGE (MRG_MyISAM) | 多 MyISAM 表邏輯合併 | 統一查詢、分區歸檔 | ❌ 寫入限制、無交易、子表結構必須一致 | 日誌分表、歷史歸檔、分表統一視圖 |
| InnoDB | 現代預設、OLTP 核心 | ✅ ACID 交易、行鎖、MVCC、外鍵、崩潰恢復、自適應雜湊索引、變更緩衝 | 空間/全文索引 (5.6+ 已支援)、壓縮需配置 | 核心業務、高並發寫入、需一致性場景 |
| MEMORY (HEAP) | 純記憶體、極速 | Hash/B-Tree 索引、表鎖 | ❌ 持久化、BLOB/TEXT、交易、行鎖、變長列轉固定長度 | Session、快取、臨時計算、可重建資料 |
| ARCHIVE | 高壓縮、僅追加 | ✅ 壓縮率高、僅 INSERT/SELECT | ❌ 索引、UPDATE/DELETE、交易 | 審計日誌、歷史歸檔、寫一次讀少 |
| CSV | CSV 檔案直接映射 | 可用外部工具處理 | ❌ 索引、型別、交易 | 資料交換、外部系統對接 |
| BLACKHOLE | 寫入即丟棄 | 記錄 Binlog、不存資料 | ❌ 讀取 | 複寫中繼、測試、異步同步閘道 |
| FEDERATED | 遠端表映射 | 跨實例查詢 | 效能差、無索引下推、連線不穩定 | 跨庫聯查 (慎用) |
| NDB (MySQL Cluster) | 分散式、高可用 | ✅ 共享無架構、自動分片、99.999% 可用性、行鎖、持久化 | 部署複雜、Join 效能弱、記憶體成本高 | 電信級核心業務、極高可用需求 |
SHOW ENGINES\G
-- 關注 Support 欄:YES/DEFAULT/NO/DISABLED

-- 方式 1:DESC (不顯示引擎)
DESC `table_name`;
-- 方式 2:SHOW CREATE TABLE (推薦,含完整 DDL)
SHOW CREATE TABLE `table_name`;
-- 輸出末尾含 ENGINE=InnoDB

-- 方式 3:SHOW TABLE STATUS (含統計資訊)
SHOW TABLE STATUS LIKE 'table_name'\G
-- Engine 欄位即為引擎

CREATE TABLE `user` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` CHAR(20) NOT NULL,
`sex` CHAR(2),
PRIMARY KEY (`id`)
) ENGINE=MERGE;


ALTER TABLE `user` ENGINE=ARCHIVE;


pt-online-schema-change 或 gh-ost 線上遷移。業務是否需要交易/行鎖/外鍵/崩潰安全? ├─ 是 → InnoDB (預設首選) │ ├─ 否 → 資料是否允許遺失/可重建? │ ├─ 是 → 訪問模式? │ │ ├─ 唯讀/讀多寫少、需全文/空間索引 → MyISAM │ │ ├─ 極速讀寫、資料可重建 → MEMORY │ │ ├─ 僅追加寫入、高壓縮、歷史歸檔 → ARCHIVE │ │ └─ 跨實例聯查 → FEDERATED (慎用) │ └─ 否 → InnoDB (即便不需交易,崩潰安全也關鍵) │ └─ 極高可用/分散式/自動分片 → NDB Cluster
default-storage-engine=InnoDB 寫入配置檔。掌握存儲引擎特性邊界,為每張表選對引擎,是 MySQL 架構師的基本功。