存儲引擎是 MySQL 底層處理數據存儲、索引、鎖定、事務的核心模組。插件式架構 讓 MySQL 支持多引擎共存,甚至單表指定不同引擎,實現「按需選擇存儲策略」——這是 MySQL 區別於 Oracle/SQL Server 單一存儲引擎的核心優勢。
SHOW ENGINES;
-- 關鍵列:Engine(名稱)、Support(YES/NO/DEFAULT)、Comment(特性描述)
SHOW VARIABLES LIKE 'have_%'; -- 底層支持情況
my.cnf → [mysqld] default-storage-engine=InnoDB 或啟動參數 --default-storage-engine=InnoDBSET SESSION default_storage_engine=MyISAM;CREATE TABLE t (id INT) ENGINE=InnoDB;
ALTER TABLE t ENGINE=MyISAM; -- 修改現有表引擎,慎用!涉及數據重寫、索引重建、鎖表風險
注意: 指定不存在的引擎會默認創建 MyISAM 表並報警告。
| 引擎 | 事務 | 鎖粒度 | 索引類型 | 外鍵 | 全文索引 | 適用場景 |
|---|---|---|---|---|---|---|
| InnoDB | ✅ ACID | 行級 (MVCC) | B+樹 (聚簇) | ✅ | 5.6+ ✅ | 核心業務、高併發、數據完整性要求高 |
| MyISAM | ❌ | 表級 | B+樹 (非聚簇) | ❌ | 5.6+ ✅ | 只讀/讀多、全文搜索、非關鍵日志、嵌入式 |
| MEMORY | ❌ | 表級 | Hash (默認)/B-tree | ❌ | ❌ | 臨時表、查詢緩存、極速查找 (數據丟失風險) |
| Archive | ❌ | 行級 (插入鎖) | 無索引 (5.1+ 支持自增索引) | ❌ | ❌ | 歸檔日志、審計數據、高壓縮、只追加 |
| CSV | ❌ | 表級 | 無 | ❌ | ❌ | 與外部程序交換數據、ETL 中間表 |
| BLACKHOLE | ❌ | 無 | 無 | ❌ | ❌ | 複製過濾、壓力測試、數據「黑洞」 |
| FEDERATED | ❌ | 遠程引擎決定 | 遠程決定 | 遠程決定 | 遠程決定 | 跨實例查詢 (性能差、不推薦生產) |
| MERGE (MRG_MyISAM) | ❌ | 表級 | MyISAM 索引 | ❌ | ❌ | 分區表邏輯合併、日志分表查詢 |
| NDB Cluster | ✅ | 行級 | Hash/B-tree | ❌ | ❌ | 高可用集群、內存計算、電信級 |
myisamchk -r 修復,耗時且可能損數據Table_locks_waited 飆升innodb_buffer_pool_size (內存 60-80%)key_buffer_size 僅緩存索引,數據依賴 OS Page Cacheibdata1) 或獨立表空間 (.ibd,innodb_file_per_table=ON).frm/.MYD/.MYI),易單表備份遷移| 場景 | 配置 | MyISAM | InnoDB | 結論 |
|---|---|---|---|---|
| 插入 10W | flush_log=1 (默認) | 29 rows/s | 2092 rows/s | InnoDB WAL 批量刷盤優勢巨大 |
| 插入 10W | flush_log=0 | 30 rows/s | 29 rows/s | InnoDB 退化為異步,性能持平 |
| 插入 100W | buffer_pool=1024M | — | 607 rows/s | 大 Buffer Pool 顯著提升大數據量寫入 |
| 插入 100W | buffer_pool=256M, flush_log=1, autocommit=0 | — | 379 rows/s | 顯式事務批量提交折中方案 |
核心洞見: innodb_flush_log_at_trx_commit 是 InnoDB 性能開關。生產建議:1 (最安全) 或 2 (OS 崩潰丟 1 秒) + SET AUTOCOMMIT=0 顯式事務控制。
需要事務/外鍵/高併發寫入/崩潰安全?
├─ 是 → InnoDB (默認首選,95%+ 現代場景)
└─ 否 → 需要全文搜索/只讀/極簡嵌入式/非關鍵日志?
├─ 是 → MyISAM / Archive / CSV
└─ 否 → InnoDB (通用性最強)
ALTER TABLE t ENGINE=InnoDB 會全表鎖、重建索引、生成臨時文件,大表必須用 OSC/gh-ostSHOW ENGINE INNODB STATUS、information_schema.INNODB_METRICS存儲引擎是 MySQL 靈活性的基石。InnoDB 以「事務、行鎖、MVCC、聚簇索引、Buffer Pool」五大核心機制,成為現代關係型數據庫的標準化選擇。掌握 SHOW ENGINES、ENGINE= 表選項、核心參數 (innodb_buffer_pool_size, innodb_flush_log_at_trx_commit) 與引擎特性的映射關係,才能在架構設計、性能調優、故障排查中做出最優決策。未來趨勢:InnoDB 持續演進 (並行查詢、即時 DDL、向量索引) + 專用引擎 (MyRocks/HeatWave) 互補共存。