在處理大數據量系統時,除了查詢效能瓶頸外,資料插入耗時過長同樣是關鍵痛點。曾有業務系統每日資料導入需耗費 4-5 小時,一旦流程中斷需重跑,極大增加運維風險。因此,大幅提升 MySQL INSERT 效能刻不容緩。
傳統逐筆插入:
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0);
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1);
優化為批次插入:
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1);
效能提升原理:

MySQL 預設每條 INSERT 會隱式建立事務,顯式使用事務可消除重複建立開銷:
START TRANSACTION; INSERT INTO `insert_table` ... VALUES (...); INSERT INTO `insert_table` ... VALUES (...); ... COMMIT;

結合「批次插入」與「事務包裹」兩大策略,實測插入效能提升約 50 倍,極大縮短資料導入窗口。

max_allowed_packet(預設 1MB),需依資料量動態調整批次大小innodb_log_buffer_size 導致日誌落盤,效能反降。建議在達到緩衝區閾值前分批提交掌握這兩大核心技巧,配合參數調優,即可輕松應對千萬級資料導入場景,將小時級耗時壓縮至分鐘級。