早期專案中 InnoDB 插入極慢(10 行/秒),改用 MyISAM 達萬行/秒。經測試發現,罪魁禍首是 InnoDB 預設 autocommit=1 且未顯式開啟事務,導致每行隱式提交,產生大量 fsync。
| 表名 | 引擎 | autocommit | 事務 |
|---|---|---|---|
| MyISAM_NT | MyISAM | N/A | 否 |
| MyISAM_TS | MyISAM | N/A | 是 |
| INNODB_NA_NB | InnoDB | 0 | 否 |
| INNODB_NA_BE | InnoDB | 0 | 是 |
| INNODB_AU_NB | InnoDB | 1 | 否 |
| INNODB_AU_BE | InnoDB | 1 | 是 |
MyISAM_NT 2.11
MyISAM_TS 2.65
INNODB_NA_NB 2.52
INNODB_NA_BE 3.86
INNODB_AU_NB 43.72 ← autocommit=1 無事務,極慢
INNODB_AU_BE 3.14
SET autocommit=0;
BEGIN;
INSERT ...; -- 批量
COMMIT;
-- 或
START TRANSACTION;
INSERT ...;
COMMIT;
切勿在循環中單條提交,應用層連接池亦需注意自動提交設定。