首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 儲存引擎深度解析:選型指南與核心差異

     編輯:MySQL 綜合教學

什麼是儲存引擎?

MySQL 將資料以不同技術儲存在檔案或記憶體中,每種技術擁有獨特的儲存機制、索引策略、鎖定粒度與功能特性。這些技術在 MySQL 中稱為「儲存引擎」(Storage Engine),舊稱「表類型」。選擇合適的引擎,能在不改動應用代碼的前提下,針對不同業務場景獲得最佳效能與功能平衡——這正是 MySQL 區別於單一儲存模式商業資料庫的核心優勢。

如何查看可用引擎

-- MySQL 4.1.2+
SHOW ENGINES;

-- 老版本
SHOW VARIABLES LIKE 'have_%';

輸出中的 `Support` 欄位:`DEFAULT`=預設、`YES`=可用、`NO`=不可用、`DISABLED`=已禁用。

指定引擎的三種方式

  1. 全域預設:配置文件 `default-storage-engine=InnoDB` 或啟動參數 `--default-storage-engine=InnoDB`
  2. 建表時指定:`CREATE TABLE t (id INT) ENGINE=InnoDB;`
  3. 修改現有表:`ALTER TABLE t ENGINE=InnoDB;`(注意:不支援相同索引/欄位類型可能導致資料遺失)

四大核心差異維度

1. 欄位與資料類型支援

  • 通用類型(整數、浮點、字串)皆支援
  • 差異在於 BLOB/TEXT、空間類型、JSON 等進階類型的支援程度
  • 部分引擎限制欄位長度或行大小上限

2. 鎖定粒度 —— 並發效能關鍵

鎖類型代表引擎特點適用場景
表鎖MyISAM鎖定整張表,寫入串行化讀多寫少、唯讀、日誌類
頁鎖BerkeleyDB鎖定 8KB 頁較少見
行鎖InnoDB僅鎖操作行,並發度最高高並發 OLTP、事務型業務

3. 索引實現

  • B-Tree:MyISAM、InnoDB 預設,支援範圍查詢、排序、前綴匹配
  • Hash:MEMORY/HEAP 可選,僅支援等值查詢,極快
  • Fulltext:MyISAM 5.6+、InnoDB 5.6+ 支援全文檢索
  • 部分引擎(MERGE、FEDERATED、BLACKHOLE)不支援自有索引

4. 事務支援

  • InnoDB:完整 ACID、行鎖、外鍵、MVCC、崩潰恢復 —— 核心業務首選
  • BDB:支援事務與頁鎖(已淘汰)
  • MyISAM、MEMORY、ARCHIVE、CSV 等不支援事務

主流引擎選型速查表

引擎核心優勢典型適用場景不適用場景
InnoDB事務、行鎖、外鍵、崩潰安全、MVCC 高並發核心業務、電商訂單、金融帳務、高並發讀寫純唯讀、超大唯讀分析表
MyISAM全文索引(舊版)、壓縮表、極快 COUNT(*)、空間索引日誌、報表、唯讀查詢、全文檢索(舊版本)高寫入、需事務、需高並發
MEMORY資料在記憶體,極快,支援 Hash 索引臨時表、快取表、查找表、Session 存儲持久化需求、資料量大於記憶體
ARCHIVE高壓縮、僅支援插入/查詢、無索引海量日誌歸檔、審計記錄、歷史數據冷存儲頻繁更新/刪除、需索引查詢
CSV以 CSV 檔案儲存,便於外部工具交換資料匯入匯出、跨系統資料交換高效能查詢、索引需求
BLACKHOLE寫入即丟棄,主從同步中繼、審計日誌過濾複寫中繼、測試、日誌過濾任何需持久化場景

遷移與兼容提醒

  • `ALTER TABLE ... ENGINE=...` 會重建表,大表耗時長,建議用 `pt-online-schema-change` 或 `gh-ost` 在線變更
  • 引擎間語法差異:外鍵、全文索引、空間索引、分區表支援不同
  • MySQL 5.7+ InnoDB 為唯一預設引擎,MyISAM 漸進式淡出

總結

理解儲存引擎特性,根據業務的「讀寫比例、事務需求、並發量、資料量、查詢模式」選型,是 MySQL 架構設計的基石。現代應用 90%+ 場景首選 InnoDB,輔以特定場景下的 MEMORY/ARCHIVE 等專用引擎。

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