MySQL採用插件式儲存引擎架構:核心服務層(SQL解析、優化、快取、連線管理)與儲存引擎層(資料I/O、索引、鎖定、交易)解耦。各引擎僅提供特定應用所需特性集合,避免不必要開銷,實現高效能、高彈性。這也是MySQL在業界基準測試中媲美或超越專有整體式資料庫的關鍵原因。
| 核心組件 | 關鍵差異點 | 代表引擎特性 |
|---|---|---|
| 並發控制 | 鎖定粒度(表/頁/列)、MVCC支援、快照讀取 | MyISAM: 表鎖 | InnoDB: 列鎖+MVCC | Falcon: 列鎖+MVCC |
| 交易支援 | ACID相容性、隔離等級、Savepoint、兩階段提交 | InnoDB: 完整ACID | BDB: 完整ACID | MyISAM: 無 |
| 參考完整性 | 外來鍵約束強制執行(DDL定義) | InnoDB: 支援 | BDB: 支援 | MyISAM: 不支援 |
| 實體儲存 | 頁大小、資料格式、壓縮、磁碟佈局 | InnoDB: 16KB頁+簇集索引 | MyISAM: 獨立檔案 | NDB: 分散式記憶體 |
| 索引支援 | B-tree、Hash、Full-text、空間、自適應雜湊 | InnoDB: B-tree+自適應雜湊 | MyISAM: B-tree+全文 | NDB: Hash+有序索引 |
| 記憶體快取 | Buffer Pool、Query Cache、鍵快取、插入緩衝 | InnoDB: Buffer Pool(資料+索引) | MyISAM: Key Buffer(僅索引) |
| 效能輔助 | 多I/O執行緒、執行緒並發、Checkpoint、批次插入 | InnoDB: 多IO執行緒+Change Buffer | MyISAM: 延遲鍵寫入 |
| 特殊功能 | 地理空間、加密、壓縮、分區、複製整合 | InnoDB: 透明加密/壓縮 | MyISAM: 壓縮唯讀表 | Spider: 分區 |
理解應用需求特徵,對號入座:
CREATE TABLE t1 ENGINE=InnoDB; CREATE TABLE t2 ENGINE=MyISAM;)| 引擎 | 關鍵參數 | 建議值 |
|---|---|---|
| InnoDB | innodb_buffer_pool_size | 實體記憶體 60-80% |
| InnoDB | innodb_log_file_size | 1GB+(大寫入量) |
| InnoDB | innodb_flush_log_at_trx_commit | 1(完整持久)或 2(高效能) |
| MyISAM | key_buffer_size | 索引總大小 20-30% 或 1-4GB |
| MyISAM | delay_key_write | ON(非關鍵表) |