在数据库批量写入场景中,选择合适的插入方式能大幅降低操作耗时,多行插入和LOAD DATA是两种最常用的批量插入实现方案,二者各有适用场景。

多行插入的实现与优化
多行插入是通过一条SQL语句携带多组插入值的方式完成批量写入,相比单条插入减少了SQL解析和网络传输的开销。
基础多行插入语法
以MySQL为例,标准的多行插入语句格式如下:
-- 向用户表批量插入3条数据 INSERT INTO user (id, name, age) VALUES (1, '张三', 20), (2, '李四', 22), (3, '王五', 25);
多行插入的优化建议
- 单条SQL的插入行数控制在合理范围,建议单次插入1000到5000行,避免SQL语句过长导致解析耗时增加
- 插入前关闭非必要的索引和约束,插入完成后重新开启,减少写入时的索引维护开销
- 如果插入的数据量较大,可以拆分多个多行插入语句分批执行,避免长时间锁表
LOAD DATA的使用方法
LOAD DATA是数据库提供的从文件直接加载数据的批量写入方式,跳过SQL解析环节,直接将数据文件内容写入表,性能通常优于多行插入。
LOAD DATA基础语法
MySQL中LOAD DATA的常用语法如下,需要先准备符合格式的数据文件:
-- 从本地文件加载数据到user表,字段分隔符为逗号,行分隔符为换行 LOAD DATA LOCAL INFILE '/tmp/user_data.csv' INTO TABLE user FIELDS TERMINATED BY ',' LINES TERMINATED BY 'n' (id, name, age);
对应的csv数据文件内容示例如下:
1,张三,20 2,李四,22 3,王五,25
LOAD DATA的注意事项
- 需要数据库开启local_infile配置,否则无法加载本地文件
- 数据文件的格式需要和表结构匹配,字段顺序、分隔符需要提前约定
- 对于包含特殊字符的字段,需要正确处理转义规则,避免数据导入错误
两种方式性能对比
在相同测试环境下,向包含3个字段的表中插入10万条数据,两种方式的耗时对比如下:
| 插入方式 | 插入10万条耗时 | 适用场景 |
|---|---|---|
| 单条插入 | 约120秒 | 仅适合极少量数据写入 |
| 多行插入(每次1000行) | 约8秒 | 数据量中等、数据来自内存或接口返回的场景 |
| LOAD DATA | 约1.5秒 | 数据量较大、数据已存储为文件的场景 |
选择建议
如果插入的数据量在几万条以内,且数据是通过程序生成的,优先选择多行插入,实现更简单,不需要额外处理数据文件。如果插入的数据量超过10万条,且数据已经存储为结构化文件,优先选择LOAD DATA,能获得更好的性能表现。同时需要注意,LOAD DATA需要文件访问权限,在部分受限的数据库环境中可能无法使用,此时多行插入是更稳妥的选择。