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

MySQL 儲存引擎完整指南:架構差異、選型決策與啟用管理實務

     編輯:MySQL 資料庫相關知識

什麼是儲存引擎?

儲存引擎(Storage Engine)是 MySQL 底層負責資料儲存、索引建立、鎖管理、交易處理、備份恢復的模組化元件。每個表可獨立指定引擎,單一資料庫可混用多種引擎。

CREATE TABLE t1 (id INT) ENGINE=InnoDB;
CREATE TABLE t2 (id INT) ENGINE=MyISAM;
CREATE TABLE t3 (id INT) ENGINE=MEMORY;

查看可用引擎

SHOW ENGINES\G
-- 關鍵欄位:
-- Engine: 引擎名
-- Support: YES/NO/DEFAULT/DISABLED
-- Comment: 簡述
-- Transactions: 是否支援交易
-- XA: 是否支援 XA 分散式交易
-- Savepoints: 是否支援存檔點

主流引擎深度對比

引擎交易鎖粒度索引類型適用場景不適用場景
InnoDB✅ ACID行鎖B+樹、FULLTEXT、SPATIAL核心業務表、高併發讀寫、需交易、外鍵唯讀壓縮歸檔、極簡日誌
MyISAM❌表鎖B+樹、FULLTEXT唯讀/極少寫入、全文搜尋(舊版)、壓縮表高併發寫入、需交易、崩潰安全
MEMORY (HEAP)❌表鎖Hash、B+樹暫存表、查找表、Session 快取、極速讀取持久化資料、大資料量(受 max_heap_table_size 限制)
Archive❌行鎖無(僅支援自增主鍵)海量日誌、審計軌跡、唯寫少讀、高壓縮隨機讀取、更新/刪除、需索引
CSV❌表鎖無與外部系統交換 CSV、日誌匯出生產業務查詢
NDB Cluster✅行鎖B+樹、Hash分散式高可用、多主寫入、電信級可用性一般單機應用、複雜 JOIN
MyRocks✅行鎖LSM Tree寫入密集、儲存空間敏感、SSD 優化讀取密集點查詢、需完整 SQL 功能

InnoDB 核心架構優勢

  • 叢集索引:主鍵即資料,主鍵查詢極快(零回表)。
  • MVCC:多版本並發控制,讀不阻塞寫、寫不阻塞讀。
  • Redo Log + Undo Log:崩潰恢復、交易回滾、持久性保證。
  • 自適應雜湊索引:熱點頁自動建立 Hash 索引加速點查。
  • Change Buffer:非唯一二級索引寫入緩衝,減少隨機 I/O。

引擎選型決策樹

  1. 需要交易/外鍵/行鎖/崩潰安全? → InnoDB(預設最佳選擇)。
  2. 唯讀/極少寫入、需全文搜尋(舊版)、壓縮存儲? → MyISAM。
  3. 臨時資料、極速查找、可接受重啟遺失? → MEMORY。
  4. 海量唯寫日誌、高壓縮、極少讀取? → Archive。
  5. 分散式多主、99.999% 可用性? → NDB Cluster。
  6. 寫入極大、SSD 儲存、空間敏感? → MyRocks(需編譯/安裝外掛)。

引擎轉換實務

-- 線上轉換(鎖表、耗時、需規劃維護窗口)
ALTER TABLE t ENGINE=InnoDB;

-- 無停機轉換(Percona Toolkit)
pt-online-schema-change --alter "ENGINE=InnoDB" D=db,t=t --execute

-- 建表時指定
CREATE TABLE t (id INT PRIMARY KEY, data TEXT) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

引擎參數調校關鍵

引擎關鍵參數建議
InnoDBinnodb_buffer_pool_size實體記憶體 60~80%
InnoDBinnodb_log_file_size1~4GB,減少 checkpoint 壓力
InnoDBinnodb_flush_log_at_trx_commit1(最安全),2/0 高效能犧牲耐用性
MyISAMkey_buffer_size索引快取,4GB 以下機器 256M~1GB
MyISAMmyisam_sort_buffer_size建立索引排序緩衝,256M
MEMORYmax_heap_table_size單表最大記憶體,預設 16MB 需調大

查看表當前引擎

SHOW TABLE STATUS FROM db_name WHERE Name = 't'\G
-- Engine: InnoDB
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved