MySQL 獨特的插拔式儲存引擎架構,讓開發者能針對不同業務場景選擇最適合的引擎,如同賽車手按鈕換引擎。本文詳細比較主流引擎特性、選擇準則與切換操作。
| 引擎 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| MyISAM (預設) |
讀取極快、支援全文索引、資料壓縮、表鎖並發讀取佳 | 不支援交易、外鍵、行鎖;崩潰易損壞需修復 | 讀多寫少、全文搜尋、資料倉儲、Web 內容管理 |
| InnoDB | 支援 ACID 交易、行級鎖、外鍵、崩潰恢復、MVCC 並發控制 | 寫入較慢、空間佔用大、無全文索引(5.6+ 已支援) | 核心業務、金融交易、高並發寫入、需外鍵完整性 |
| MEMORY (HEAP) | 資料全在記憶體、極速讀寫、無磁碟 I/O | 重啟資料消失、不支援 BLOB/TEXT、表鎖並發差 | 暫存表、快取表、查詢中介結果、Session 儲存 |
| Archive | 高壓縮比、支援大量資料插入 | 不支援索引、無 UPDATE/DELETE、查詢需全表掃描 | 日誌存檔、歷史資料、審計追蹤 |
| CSV | 直接以 CSV 文字檔儲存、易於匯入匯出 | 無索引、查詢慢、無交易支援 | 資料交換、外部工具處理、簡單匯出 |
CREATE TABLE t_myisam (id INT PRIMARY KEY, data VARCHAR(100)) ENGINE=MyISAM;
CREATE TABLE t_innodb (id INT PRIMARY KEY, data VARCHAR(100)) ENGINE=InnoDB;
ALTER TABLE t_myisam ENGINE=InnoDB;
MySQL 會建立新表、複製資料、重建索引、切換表名,過程中原表可讀但寫入會阻塞。大表操作建議低峰期執行或使用 pt-online-schema-change。
SHOW TABLE STATUS LIKE 't_myisam'\G
-- 或
SHOW CREATE TABLE t_myisam;
同一資料庫中不同表可使用不同引擎:
善用儲存引擎靈活性,針對業務特性「對症下藥」,是 MySQL 效能調優的關鍵技能之一。