| 特性 | InnoDB | MyISAM |
|---|---|---|
| 事務支援 | ✅ ACID、行級鎖、MVCC | ❌ 無事務、表級鎖 |
| 外鍵約束 | ✅ | ❌ |
| 崩潰恢復 | ✅ Redo/Undo Log 自動恢復 | ❌ 需手工 REPAIR TABLE |
| 並發效能 | 高並發寫入優秀 | 讀多寫少場景較快 |
| 全文索引 | 5.6+ 支援 | 早期支援 |
| 資料壓縮 | 頁面壓縮、透明壓縮 | 支援 myisampack 唯讀壓縮 |
| 跨平台複製 | 需邏輯備份/還原 | .MYD/.MYI 可直接跨 OS 複製 |
| 預設引擎 | 5.5+ 預設 | 5.5 前預設 |
-- 單表
ALTER TABLE tbl_name ENGINE = InnoDB;
-- 批量 (配合 73012 文章 SQL)
SELECT GROUP_CONCAT(CONCAT('ALTER TABLE `', TABLE_NAME, '` ENGINE=InnoDB;') SEPARATOR ' ')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'db_name' AND ENGINE = 'MyISAM';
注意:轉換會鎖表重建,大表建議用 pt-online-schema-change 在線轉換。
innodb_buffer_pool_size = 70% 物理記憶體
innodb_log_file_size = 1-4G
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_thread_concurrency = 0 # 0=自動
BEGIN; ... COMMIT; 合併事務,否則每條 INSERT 觸發 fsync 效能極差。mysqldump --single-transaction --master-data=2)。ALTER TABLE 或在線工具。ANALYZE TABLE 更新統計。