處理千萬級數據導入時,INSERT 效率極低(3000 萬條需 20+ 小時)。MySQL LOAD DATA 可將速度提升 10 倍以上。本文詳解語法、本地/遠端導入、REPLACE 更新模式,以及自動維護時間戳的兩種方案。
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE] INTO TABLE tbl_name
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char']]
[LINES [STARTING BY 'string'] [TERMINATED BY 'string']]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]
LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE target_table;
LOAD DATA LOCAL INFILE 'data.csv' REPLACE INTO TABLE target_table;
導入腳本中為每行數據生成當前時間戳,隨數據一同寫入。靈活但增加應用複雜度。
建表時定義時間戳欄位自動更新:
`update_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
特性:
| 方式 | 3000萬條耗時 | 相對速度 |
|---|---|---|
| INSERT 逐條執行 | 20+ 小時 | 1x(基準) |
| LOAD DATA LOCAL INFILE | ~2 小時 | 10x+ |
LOCAL 關鍵字表示文件在客戶端,需客戶端與服務端均啟用 local_infile=1REPLACE 需表有主鍵或唯一索引,否則等同 IGNORE