核心比喻:資料庫引擎即汽車引擎
MySQL 獨特的「插拔式儲存引擎」架構,讓開發者能像按按鈕換汽車引擎一樣,為不同表選擇最適合的儲存引擎,而無需遷移整個資料庫。
引擎從哪來?編譯時決定
- 預設支援:ISAM、MyISAM、MEMORY (HEAP)
- 常見擴展:InnoDB、BerkeleyDB (BDB) — 需編譯時
--with-innodb、--with-bdb
- 自定義引擎:使用 MySQL++ API 開發(如需原生 XML 引擎)
Windows 開發者可能陌生「為加功能重新編譯」,但在 *nix 世界這是標準做法。
五大核心引擎特性對比
1. ISAM — 經典唯讀優化
- 優點:讀取極快、佔用資源少、歷經時間考驗
- 缺點:不支援事務、無容錯(磁碟壞軌數據不可恢復)
- 適用:唯讀歸檔、日誌分析、配合複寫備份
2. MyISAM — MySQL 預設引擎 (5.5 前)
- ISAM 增強版:新增索引/欄位管理、表鎖優化並發讀寫
- 工具鏈:
myisamchk 修復、myisampack 壓縮
- 維護成本:需定期
OPTIMIZE TABLE 回收碎片空間
- 適用:Web 讀多寫少、全文搜尋、虛擬主機普遍支援
3. MEMORY (HEAP) — 全內存極速
- 數據駐留記憶體,速度碾壓磁碟引擎
- 缺點:非持久化(重啟丟失)、不支援 BLOB/TEXT、表鎖
- 適用:臨時中間表、查詢緩存、Session 存儲
- ⚠ 用畢立刻
DROP TABLE 釋放記憶體
4. InnoDB — 事務與高併發首選
- 支援 ACID 事務、行級鎖、外鍵、MVCC 多版本併發控制
- 崩潰恢復:Redo/Undo Log 保證數據不丟
- 代價:寫入較 MyISAM 慢、佔用更多記憶體/磁碟
- 適用:訂單、支付、庫存、任何需一致性的核心業務
5. BerkeleyDB (BDB) — 另一事務選擇
- 頁級鎖、支援事務、Sleepycat 開發
- 併發性優於 MyISAM,遜於 InnoDB 行級鎖
- 現已較少使用,MySQL 5.1+ 移除支援
為什麼不直接用預設?
「預設夠用」是最大誤區。若訂單表用 MyISAM 遇到斷電,數據損壞無法恢復;若日誌表用 InnoDB,寫入效能白白浪費。靈活性才是關鍵——針對每張表業務特性選引擎,才能在效能與可靠性間取得最佳平衡。