將單條 INSERT 合併為批量 INSERT(Batch Insert),在測試環境中將 10 萬條數據導入耗時從 1777 秒(約 29.6 分鐘) 驟降至 53 秒,性能提升 33 倍。但並非 Values 越多越好,存在明顯的「拐點」。
INT 值| SQL 模式 | 耗時 | QPS | RPS (有效行/秒) |
|---|---|---|---|
| 單條 INSERT (SQL A) | 1777 秒 | 56 | 56 |
| 批量 INSERT,每批 10 個值 (SQL B) | 53 秒 | 188 | 1886 |
update 階段耗時幾乎一致(單值 0.000061s vs 10值 0.000073s),固定開銷被攤薄。測試不同 values number(每批行數)的效果:
| Values/批次 | 總耗時(秒) | QPS | RPS (吞吐量) |
|---|---|---|---|
| 1 | 1777 | 56 | 56 |
| 10 | 53 | 188 | 1886 |
| 50 (最優) | 49 | 40 | 2040 |
| 100 | 50 | 19 | 2000 |
| 200 | 51 | 10 | 1960 |
| 500 | 57 | 3 | 1754 |
| 1000 | 60 | 2 | 1666 |
| 5000 | 69 | 0.3 | 1449 |
| 10000 | 133 | 0.07 | 751 |
純粹按數量或時間觸發均有缺陷,推薦 「數量閾值」與「時間閾值」並行:
N 條(如 50) → 立即寫入T 秒(如 1 秒) → 立即寫入(無論積攢多少)優點:高並發時走數量閾值保吞吐;低並發時走時間閾值保實時性。