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

MySQL 存儲引擎全景指南:MyISAM、InnoDB、Memory、Archive 特性、操作與選型

     編輯:MySQL 資料庫相關知識

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 效能弱、記憶體成本高 電信級核心業務、極高可用需求

引擎查看與修改實戰指令

1. 查看支援引擎

SHOW ENGINES\G
-- 關注 Support 欄:YES/DEFAULT/NO/DISABLED

SHOW ENGINES 輸出

2. 查看表引擎(三種方式)

-- 方式 1:DESC (不顯示引擎)
DESC `table_name`;

-- 方式 2:SHOW CREATE TABLE (推薦,含完整 DDL)
SHOW CREATE TABLE `table_name`;
-- 輸出末尾含 ENGINE=InnoDB

SHOW CREATE TABLE 輸出

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

SHOW TABLE STATUS 輸出

3. 建表時指定引擎

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

建表指定引擎

驗證引擎

4. 修改現有表引擎

ALTER TABLE `user` ENGINE=ARCHIVE;

ALTER TABLE 修改引擎

驗證修改後引擎

  • 注意: 引擎轉換 = 重建表,**大表會長時間鎖表**,生產環境請用 pt-online-schema-change 或 gh-ost 線上遷移。
  • 轉換前備份、驗證相容性(如 MyISAM 全文索引 → InnoDB 需重建)。

引擎選型決策樹

業務是否需要交易/行鎖/外鍵/崩潰安全?
├─ 是 → InnoDB (預設首選)
│
├─ 否 → 資料是否允許遺失/可重建?
│   ├─ 是 → 訪問模式?
│   │   ├─ 唯讀/讀多寫少、需全文/空間索引 → MyISAM
│   │   ├─ 極速讀寫、資料可重建 → MEMORY
│   │   ├─ 僅追加寫入、高壓縮、歷史歸檔 → ARCHIVE
│   │   └─ 跨實例聯查 → FEDERATED (慎用)
│   └─ 否 → InnoDB (即便不需交易,崩潰安全也關鍵)
│
└─ 極高可用/分散式/自動分片 → NDB Cluster

最佳實踐建議

  • 預設 InnoDB: 5.5+ 已為預設,default-storage-engine=InnoDB 寫入配置檔。
  • 按表選型: 同一資料庫不同表可用不同引擎,如核心交易 InnoDB、日誌 Archive、快取 Memory。
  • 避免混用陷阱: 跨引擎 Join 效能差、鎖語義不同、備份工具參數不同。
  • 監控引擎指標: InnoDB 緩衝池命中率、MyISAM 關鍵緩衝命中率、Memory 表大小佔比。

掌握存儲引擎特性邊界,為每張表選對引擎,是 MySQL 架構師的基本功。

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