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

MySQL 常用存儲引擎全解析:MyISAM、InnoDB、MEMORY、MERGE 特性對比

     編輯:MySQL 綜合教學

MySQL 存儲引擎概覽

MySQL 5.5 版本前預設存儲引擎為 MyISAM,5.5 及之後版本改為 InnoDB。可通過修改配置文件 default-storage-engine 參數變更預設引擎,或在建表時透過 ENGINE=... 指定。使用 SHOW ENGINES 查看支援引擎,SELECT ENGINE FROM INFORMATION_SCHEMA.ENGINES WHERE TRANSACTIONS='YES' 篩選支援事務的引擎。

MyISAM:高速讀取的非事務引擎

核心特性: 不支援事務、外鍵,但讀取速度極快,適合以 SELECT/INSERT 為主、對事務完整性要求不高的場景。

檔案結構: 每張表對應三個同名不同副檔名的檔案:

  • .frm - 表定義
  • .MYD (MYData) - 數據檔案
  • .MYI (MYIndex) - 索引檔案

數據與索引檔案可透過 DATA DIRECTORY 和 INDEX DIRECTORY 分離存放。表損壞時可用 CHECK TABLE 檢查、REPAIR TABLE 修復。

三種存儲格式:

  • 靜態表(固定長度): 效能最好,但空間浪費;尾部空格讀取時會被移除。
  • 動態表(變長): 節省空間,但頻繁更新刪除產生碎片,需定期 OPTIMIZE TABLE 整理。
  • 壓縮表: 由 myisampack 建立,極度節省空間,唯讀,適合歸檔數據。

InnoDB:事務安全的首選引擎

核心優勢: 支援 ACID 事務、行級鎖、外鍵約束、MVCC 多版本並發控制,寫入效能較 MyISAM 稍弱,佔用空間較大。

關鍵特性:

  • 自增列可手動插入 0/NULL 觸發自增,LAST_INSERT_ID() 獲取最新值,ALTER TABLE ... AUTO_INCREMENT=n 強制設定。
  • 自增列必須為索引(或組合索引首列),MyISAM 則允許組合索引非首列。
  • 唯一支援外鍵的引擎:建立外鍵需父表有索引,子表自動建立索引;支援 RESTRICT/CASCADE/SET NULL/NO ACTION 四種級聯動作。
  • 兩種表空間模式:共享表空間(預設 ibdata1)與獨立表空間(innodb_file_per_table=ON,推薦)。

MEMORY:記憶體級極速引擎

數據完全駐留記憶體,存取速度極快,預設使用 Hash 索引。服務重啟數據丟失(結構保留),適合查詢引用表、統計中間結果表。表大小受 max_heap_table_size(預設 16MB)與 MAX_ROWS 限制。

MERGE:MyISAM 表集合虛擬引擎

將結構相同的多張 MyISAM 表邏輯合併,本身不存數據,操作透傳到底層表。插入策略由 INSERT_METHOD 控制(FIRST/LAST/NO)。DROP TABLE 僅移除定義,不影響底層表。不同於分區表,MERGE 不會智能路由寫入。

引擎選型總結表

存儲引擎對比總結表

選型建議: 事務業務首選 InnoDB;唯讀/日誌分析高並發讀考慮 MyISAM;熱點查找表用 MEMORY;歷史歸檔大表可用 MERGE 或分區表。

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