InnoDB 是 MySQL 默認、唯一支持事務 的存儲引擎,提供 ACID 保證、行級鎖、MVCC(多版本並發控制)、外鍵約束,專為高併發、大數據量、高可靠場景設計。
| 特性 | 技術細節 | 收益 |
|---|---|---|
| 事務支持 | Commit / Rollback / Crash Recovery | 數據一致性、原子性 |
| 行級鎖 | Record Lock / Gap Lock / Next-Key Lock | 高併發寫入吞吐 |
| MVCC | Undo Log + Read View,一致性非鎖定讀 | 讀寫不阻塞、快照隔離 |
| 聚簇索引 | 主鍵即數據文件(B+Tree),葉子節點存全行 | 主鍵查詢極快、範圍查詢高效 |
| 自適應哈希索引 | 熱頁面自動建哈希(innodb_adaptive_hash_index) | 點查加速、類 Hash 索引性能 |
| 插入緩衝 | 非唯一二級索引延寫合併(innodb_change_buffering) | 減少隨機 IO、寫入放大 |
| 雙寫緩衝 | 頁寫入前先寫共享表空間 doublewrite buffer | 防止寫一半斷電導致頁損壞 |
| 表空間管理 | innodb_file_per_table 獨立 .ibd / 共享表空間 | 單表遷移、空間回收、備份靈活 |
| 維度 | InnoDB | MyISAM |
|---|---|---|
| 事務 | 支持 | 不支持 |
| 鎖粒度 | 行級 | 表級 |
| 外鍵 | 支持 | 不支持 |
| 崩潰恢復 | Redo/Undo Log 自動恢復 | 需 myisamchk 手工修復 |
| 全文索引 | 5.6+ 支持 | 早期支持 |
| 空間佔用 | 較大(元數據、Undo、Redo) | 較小 |
[mysqld]
innodb_buffer_pool_size = 物理內存 60-80%
innodb_log_file_size = 1G 以上
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = ON
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_io_capacity = 2000 # SSD 可調高
MySQL 8.0 進一步增強:並行 Redo Log、即時加列、直方圖統計、Clone Plugin 等,持續鞏固核心引擎地位。