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

MySQL 存儲引擎選型指南:MyISAM、InnoDB、Memory、NDB 等 8 大引擎特性對比與按表選型策略

     編輯:MySQL 資料庫相關知識

核心引擎特性對比表

引擎事務鎖粒度索引類型適用場景備註
MyISAM❌表級B-tree、Fulltext唯讀多、日誌、統計、非關鍵數據5.5 前預設,全文索引優勢
InnoDB✅ ACID行級 (MVCC)B-tree、Fulltext (5.6+)核心業務:訂單、帳戶、庫存5.5+ 預設,崩潰安全、外鍵
Memory (HEAP)❌表級Hash (預設)、B-tree臨時表、查找表、Session 緩存重啟數據丟失,僅支援固定長度行
Archive❌行級 (插入鎖)無索引 (5.1+ 支援)海量日誌、審計、歷史歸檔高壓縮、僅支援 INSERT/SELECT
CSV❌表級無外部系統數據交換、ETL 中間表直接讀寫 CSV 檔案
Blackhole❌無無複制中繼、測試、審計過濾寫入即丟棄,Binlog 可記錄
Federated❌遠程遠程異構數據庫聯邦查詢、微服務聚合網路延遲敏感,生產慎用
NDB Cluster✅行級Hash、Ordered Index極高可用、分佈式、內存計算獨立集群架構,運維複雜

選型決策樹

  1. **需要事務/外鍵/崩潰安全?** → InnoDB(預設首選)
  2. **純唯讀/插入多、全文搜尋、不需事務?** → MyISAM
  3. **極高速查找、數據可重建、重啟可丟失?** → Memory
  4. **海量唯寫日誌、合規歸檔、極少讀取?** → Archive
  5. **需直接產出/讀取 CSV 檔?** → CSV
  6. **複制中繼/雙寫過濾?** → Blackhole
  7. **跨實例聯邦查詢?** → Federated(評估延遲)
  8. **99.999% 可用性、分佈式內存計算?** → NDB Cluster

關鍵原則:同一資料庫不同表可混用不同引擎

MySQL 插件式存儲架構允許:

CREATE TABLE orders (...) ENGINE=InnoDB;
CREATE TABLE access_log (...) ENGINE=Archive;
CREATE TABLE ip_lookup (...) ENGINE=Memory;
CREATE TABLE dict_export (...) ENGINE=CSV;

根據業務特性**按表選型**,而非全庫統一,最大化效能與功能匹配度。

修改現有表引擎

ALTER TABLE tbl_name ENGINE=InnoDB;

大表操作會鎖表重建,建議:

  • 低峰期執行
  • 使用 pt-online-schema-change (Percona Toolkit) 在線無鎖變更
  • 或建新表導數據再重命名切換

總結

**InnoDB 是 90% 場景的正解**,其餘引擎針對特定細分場景(全文、緩存、歸檔、聯邦、集群)提供極致優化。**理解業務讀寫模式、一致性要求、運維能力,按表精準選型**,是 MySQL 架構師的核心功力。

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