MySQL 5.1+ 引入 Pluggable Storage Engine Architecture:
- 上層:SQL 解析器、優化器、連接池、權限、緩存(引擎無關)。
- 下層:存儲引擎負責數據存取、索引、鎖、事務、備份恢復等物理操作。
- 接口:handler 類虛函數(read_row、write_row、start_stmt、commit...)。
優勢:業務邏輯與存儲物理分離,同一 SQL 可無縫切換引擎;DBA 可按表級選擇最優引擎。
| 引擎 | 事務 | 鎖粒度 | MVCC | 全文索引 | 壓縮 | 典型場景 |
|---|---|---|---|---|---|---|
| InnoDB | ✅ ACID | 行鎖 | ✅ | 5.6+ ✅ | 頁壓縮 | OLTP 核心業務、高併發、數據安全 |
| MyISAM | ❌ | 表鎖 | ❌ | ✅ | ❌ | 只讀/極少寫、全文搜索、日志歸檔 |
| Memory | ❌ | 表鎖 | ❌ | ❌ | ❌ | 臨時表、查找表、極速讀、數據可丟失 |
| Archive | ❌ | 行鎖 | ❌ | ❌ | ✅ zlib | 海量日志、審計、極少查詢 |
| CSV | ❌ | 表鎖 | ❌ | ❌ | ❌ | 異構數據交換、外部工具處理 |
| Federated | ❌ | 遠程 | ❌ | ❌ | ❌ | 跨實例查詢、邏輯數據庫整合 |
| NDB Cluster | ✅ | 行鎖 | ✅ | ❌ | ❌ | 高可用、分片、極低延遲讀寫 |
| Blackhole | ❌ | 無 | ❌ | ❌ | ❌ | binlog 過濾、壓測、異步複製中繼 |
-- 建表時指定
CREATE TABLE t (id INT PRIMARY KEY) ENGINE=InnoDB;
-- 修改現有表(會重建表,大表慎用,建議 pt-online-schema-change)
ALTER TABLE t ENGINE=InnoDB;
-- 查看表引擎
SHOW TABLE STATUS LIKE 't'\G
-- 或
SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_NAME='t';
SAVEPOINT、ROLLBACK TO SAVEPOINT、RELEASE SAVEPOINT。COMMIT/ROLLBACK,無 Savepoint。混合引擎事務風險:單事務跨 InnoDB/MyISAM 表,MyISAM 操作即時生效無法回滾,導致數據不一致。**強烈禁止跨引擎事務**。
-- 安裝插件(需 SUPER 權限,.so 在 plugin_dir)
INSTALL PLUGIN ha_example SONAME 'ha_example.so';
-- 卸載插件(確無表使用該引擎)
UNINSTALL PLUGIN ha_example;
-- 查看已安裝插件
SHOW PLUGINS;
SELECT * FROM information_schema.PLUGINS WHERE PLUGIN_TYPE='STORAGE ENGINE';
MySQL 存儲引擎架構賦予了極大靈活性:**90%+ 核心業務表應使用 InnoDB**;特殊場景(歸檔、全文、跨實例、極速緩存)再引入 MyISAM/Archive/Federated/Memory。掌握各引擎能力邊界,按表級選型,是高性能 MySQL 架構設計的核心技能。