| 磁盤存儲結構 |
三文件:.frm (結構)、.MYD (資料)、.MYI (索引) |
共享表空間 ibdata1 + 獨立 .ibd (開啟 file_per_table),大小受 OS 限制 (通常 2TB+) |
InnoDB 便於單表備份/遷移/壓縮 |
| 事務支援 |
❌ 不支援 |
✅ 完整 ACID、行級鎖、MVCC、崩潰安全恢復 |
**核心業務必選 InnoDB** |
| 鎖粒度 |
表鎖 (Table Lock) |
行鎖 (Row Lock) + 間隙鎖 + Next-Key Lock |
高並發寫入選 InnoDB;唯讀/低並發 MyISAM 可接受 |
| SELECT/INSERT/UPDATE/DELETE 效能 |
大量 SELECT 快 (全表掃描無 MVCC 開銷) |
大量 INSERT/UPDATE 快 (行鎖 + 變更緩衝區) |
讀多寫少 → MyISAM;寫多/混合 → InnoDB |
| AUTO_INCREMENT 行為 |
表級計數器,重啟後 MAX(id)+1,刪除尾部 ID 不重用 |
內存計數器,重啟重掃 MAX(id),5.7+ 持久化到 redo log,刪除尾部 ID 重啟後可能重用 |
InnoDB 8.0+ 持久化解決重啟重掃效能問題 |
| COUNT(*) 效能 |
O(1) 直接讀取表統計行數 |
O(N) 全表/索引掃描 (MVCC 可見性檢查) |
頻繁 COUNT(*) 考慮快取計數表或 Redis |
| DELETE 表行為 |
DELETE FROM t 瞬間完成 (截斷文件) |
逐行刪除,產生 Undo Log,較慢但可回滾 |
大量清空用 TRUNCATE (兩者同為 DDL 瞬時完成) |
| 外鍵支援 |
❌ |
✅ |
需外鍵約束必選 InnoDB |
| 全文索引 |
✅ 早期支援 |
✅ 5.6+ 支援 (ngram/MeCab 中文分詞) |
現代版本無差異 |
| 壓縮表 |
✅ myisampack (唯讀) |
✅ ROW_FORMAT=COMPRESSED (可讀寫) |
InnoDB 壓縮更靈活 |