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

MySQL 儲存引擎深度解析:MyISAM、InnoDB、Memory 選型指南

     編輯:MySQL 資料庫相關知識

為什麼儲存引擎選擇至關重要?

MySQL 支援多種儲存引擎,各具特色。建表時透過 ENGINE=引擎名 指定,後期更換成本極高,因此架構初期必須根據業務特性做正確選型。

建表指定引擎範例

CREATE TABLE `news` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  `content` VARCHAR(45) NULL,
  `created` VARCHAR(45) NULL,
  PRIMARY KEY (`id`)
) ENGINE = MyISAM;

注意: 表名大小寫敏感度取決於作業系統(Windows 不敏感、Linux 敏感)。

常見引擎總覽

MySQL 內建引擎眾多:MyISAM、InnoDB、Memory、Archive、CSV、Federated、Blackhole、NDB Cluster 等。實務上最常用的三大引擎足以覆蓋 90% 以上場景。

三大主流引擎深度對比

特性MyISAMInnoDBMemory
預設引擎5.5 前為預設5.5+ 為預設否
事務支援❌ 不支援✅ 完整 ACID❌ 不支援
鎖粒度表級鎖行級鎖表級鎖
外鍵約束❌✅❌
全文索引✅ (5.6+ InnoDB 也支援)✅ (5.6+)❌
資料持久化檔案儲存表空間 (ibdata/ibd)僅記憶體,重啟資料消失
索引/資料載入速度快較慢極快 (無 I/O)
並發效能低 (表鎖)高 (行鎖+MVCC)高 (但受表鎖限制)
崩潰恢復困難Redo/Undo Log 自動恢復不可恢復

選型決策樹

  • 選 MyISAM: 唯讀/多讀少寫、不需事務、需全文搜尋(舊版本)、跨平台直接複製檔案遷移(如靜態報表、日誌、新聞系統)。
  • 選 InnoDB: 預設首選。涉及金流、訂單、庫存等資金/核心業務、高並發寫入、需外鍵完整性、需崩潰安全恢復。
  • 選 Memory: 臨時熱點資料、Session 快取、查詢速度極度敏感且資料可重建(重啟後資料遺失可接受)。

常用管理指令

-- 查看表引擎
SHOW CREATE TABLE tbl_name;
SHOW TABLE STATUS FROM db_name WHERE Name='tbl_name';

-- 修改引擎 (會重建表,鎖表時間長,大表慎用)
ALTER TABLE tbl_name ENGINE=InnoDB;

-- 修改預設引擎 (僅影響後續建表)
SET default_storage_engine=InnoDB;
-- 或啟動參數 --default-storage-engine=InnoDB

總結:不確定時選 InnoDB。MyISAM 適用特定唯讀場景,Memory 僅作暫存加速。引擎選型是架構設計的基石,切勿草率決定。

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