MySQL 將數據以不同技術存儲於文件或內存中,每種技術擁有獨特的存儲機制、索引策略、鎖定粒度及功能特性。這些技術在 MySQL 中稱為存儲引擎(舊稱表類型)。選擇合適的引擎,可在不修改應用代碼的前提下,針對特定業務場景顯著提升性能或獲得關鍵功能(如事務支持、全文搜索、空間索引等)。
傳統商業數據庫通常僅支持單一存儲格式(「一刀切」),導致要么性能妥協,要么投入大量調優精力。MySQL 的插拔式存儲引擎架構,讓開發者能在表級別靈活選擇最適合的引擎,實現「按需分配,極致優化」。
MySQL 4.1.2+ 版本執行:
SHOW ENGINES;
輸出關鍵列:
YES(可用)、DEFAULT(默認)、NO(不可用)、DISABLED(已禁用);| 引擎 | 事務 | 鎖粒度 | 外鍵 | 全文索引 | 適用場景 |
|---|---|---|---|---|---|
| InnoDB | ✅ 支持 (ACID) | 行級 | ✅ 支持 | 5.6+ 支持 | 核心業務、高併發寫入、數據完整性要求高的場景 (默認推薦) |
| MyISAM | ❌ 不支持 | 表級 | ❌ 不支持 | ✅ 支持 (5.6 前唯一選擇) | 只讀/多讀少寫、全文搜索(舊版本)、日誌/統計類表 |
| MEMORY (HEAP) | ❌ 不支持 | 表級 | ❌ 不支持 | ❌ 不支持 | 臨時表、緩存表、極高速讀寫、數據可丟失場景 |
| Archive | ❌ 不支持 | 行級 | ❌ 不支持 | ❌ 不支持 | 海量歷史歸檔、只寫少讀、高壓縮比需求 |
| CSV | ❌ 不支持 | 表級 | ❌ 不支持 | ❌ 不支持 | 與外部工具交換數據、日志導出 |
| NDB Cluster | ✅ 支持 | 行級 | ✅ 支持 | ❌ 不支持 | 分布式高可用、內存計算、電信級應用 |
-- 建表時指定
CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB;
-- 修改現有表引擎 (會鎖表重建,大表謹慎操作)
ALTER TABLE t1 ENGINE=InnoDB;
SHOW ENGINE INNODB STATUS 觀察 InnoDB 內部狀態;存儲引擎是 MySQL 靈活性的核心體現。理解各引擎特性,結合業務讀寫模式、數據重要性、功能需求進行選型,是架構師與 DBA 的必修課。當無特殊理由時,InnoDB 應為默認首選。