MyISAM 是 MySQL 5.5 前的預設引擎,現定位於只讀/讀多寫少、全文搜尋、資料倉儲從庫場景。不支援事務、行鎖、外鍵。
| 特性 | MyISAM | InnoDB |
|---|---|---|
| 事務 | ❌ | ✅ |
| 鎖粒度 | 表鎖 | 行鎖 |
| 全文索引 | ✅ (5.6 前獨有) | ✅ (5.6+) |
| 壓縮表 | ✅ myisampack | ❌ |
| 崩潰恢複 | ❌ 需手動 REPAIR | ✅ Redo/Undo Log |
| 檔案結構 | .frm/.MYD/.MYI 可直接複製遷移 | 共享表空間/獨立表空間 |
concurrent_insert 參數控制尾部插入是否並發 (MyISAM 特有)。⚠️ 長時間寫操作會導致整表阻塞,甚至拖垮服務器。
FULLTEXT) 內建,適合中小型文本搜尋。DELAY_KEY_WRITE=ON (預設) 延遲索引刷盤,寫入快但崩潰後需 REPAIR。-- 檢查表
CHECK TABLE tbl_name;
-- 修復表 (MyISAM 專屬)
REPAIR TABLE tbl_name;
-- 壓縮唯讀表 (生產慎用,需解壓才能寫入)
myisampack /path/to/tbl_name.MYI
壓縮後表體積大幅縮減 (通常 40%-60%),查詢速度提升 (I/O 減少),但**不可寫入**。
myisampack + 只讀掛載。REPAIR TABLE 耗時不可控,大表可能數小時。MyISAM 以「簡單、緊湊、全文、壓縮」四大特性,在唯讀/分析/歸檔場景仍有不可替代價值。但核心業務**必須**選 InnoDB。架構設計時,明確「寫路徑 InnoDB、讀路徑 MyISAM 從庫」分離策略,能最大化發揮兩者優勢。
參考:《高效能 MySQL》