實測索引策略與提交頻率對 InnoDB 批量寫入(30 萬行)的影響,得出明確量化結論指導實務優化。
id INT AUTO_INCREMENT PRIMARY KEY, c1 INT, c2 INT, c3 TIMESTAMP, c4 VARCHAR(200)insert_mytab(rownum, commitrate) 控制提交頻率。| 索引配置 | 相對無索引基準 |
|---|---|
| 無索引 | 基準 (100%) |
| 自增主鍵 | +3.11%(更快) |
| 自增主鍵 + 二級索引 | -27.37%(較慢) |
建議:InnoDB 表必須有自增主鍵,順序寫入減少頁分裂,提升寫入效能;二級索引按查詢需求最小化建立。
| 提交頻率 | 相對一次性提交 | 耗時倍數 |
|---|---|---|
| 一次性提交 (commitrate=0) | 基準 | 1.00x |
| 每 10 萬行 | -1.17% | 1.01x |
| 每 1 萬行 | -3.01% | 1.03x |
| 每 1 千行 | -23.38% | 1.30x |
| 每 100 行 | -24.44% | 1.32x |
| 每 10 行 | -92.78% | 13.9x |
| 每 1 行 | -546.78% | 6.47x |

innodb_flush_log_at_trx_commit=1 預設每提交 fsync)。mysqldump --extended-insert 產生批次 INSERT,比單行 INSERT 快 5 倍以上,同理。| 場景 | 提交策略 |
|---|---|
| 高併發線上業務 | 盡快提交,縮短鎖持有時間,避免大事務阻塞 |
| 離線/批量資料導入 | 大批次提交(1萬-10萬行/次),或關閉 autocommit 手動控制 |
| 混合負載 | 業務事務小批次提交,導入任務大批次提交,隔離連線池 |