同樣 419 萬筆資料,LOAD DATA INFILE 導入 MyISAM 僅需 2.97 秒,InnoDB (預設 innodb_flush_log_at_trx_commit=1) 卻耗時 58.37 秒——差距近 20 倍。本文實測對比並探討調優方向。
SELECT ... INTO OUTFILE 導出文字檔id int, content mediumtext,僅引擎不同innodb_flush_log_at_trx_commit = 1(預設,最安全)| 引擎 | 參數設定 | 耗時 | 備註 |
|---|---|---|---|
| InnoDB | flush_log_at_trx_commit=1 | 58.37 秒 | 每筆同步刷盤,最安全 |
| MyISAM | 預設 | 2.97 秒 | 無事務日誌,極速 |
| InnoDB | flush_log_at_trx_commit=2 | 56.46 秒 | 改為 2 幾無改善(批量導入仍走 redo log) |
flush_log_at_trx_commit=1 要求每筆提交 fsync 刷盤;批量導入實際上是單一大交易,但仍需大量 redo log 寫入與緩衝池管理。innodb_buffer_pool_size、innodb_log_file_size、設 innodb_flush_log_at_trx_commit=2 或 0(風險自負)、關閉 unique_checks/foreign_key_checks 可顯著提升 InnoDB 導入速度。結論:純導入/匯入場景 MyISAM 極快;線上業務強烈建議 InnoDB,導入前可暫時調參數或改用 mysqldump --single-transaction + 管道導入。