首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 存儲引擎全景指南:架構原理、核心引擎對比、選型決策、事務支持與插件化管理

     編輯:MySQL 資料庫相關知識

插件式存儲引擎架構

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 過濾、壓測、異步複製中繼

選型決策樹

  1. 需要事務/行鎖/MVCC? → InnoDB(默認首選)。
  2. 純只讀、全文搜索、不關心崩潰恢復? → MyISAM。
  3. 數據可重建、極速查找、小表? → Memory。
  4. 海量寫入、極少讀取、合規歸檔? → Archive。
  5. 跨 MySQL 實例透明查詢? → Federated。
  6. 多活、自動分片、99.999% 可用性? → NDB Cluster。

指定/變更表引擎

-- 建表時指定
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';

事務支持深度

  • InnoDB:MVCC + 紅黑樹鎖 + 兩階段提交,支持 SAVEPOINT、ROLLBACK TO SAVEPOINT、RELEASE SAVEPOINT。
  • NDB:同步複製兩階段提交,支持 COMMIT/ROLLBACK,無 Savepoint。
  • BDB(已廢棄):基於 Berkeley DB,支持基本事務。

混合引擎事務風險:單事務跨 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 架構設計的核心技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved