Python脚本从服务器共享导入海量数据:批量/逐行写入方案咨询
批量插入vs单行插入的性能选择(针对千万级文件审计数据)
毫无疑问,每次批量插入20行数据的性能远优于生成一行插入一行,核心原因如下:
- 减少数据库交互开销:单行插入每次都要发起独立的数据库请求,哪怕用长连接也会有协议解析、网络往返的消耗;批量操作把多次请求合并成一次,能大幅降低这部分损耗。
- 降低事务提交成本:单行插入若每插一行就提交事务,数据库要频繁执行日志刷盘、锁释放等操作;批量插入可在单个事务内完成多行写入,减少事务相关的性能消耗。
- 触发数据库写入优化:主流数据库对批量写入有专门优化逻辑,比如批量解析SQL、减少索引更新次数,单行插入无法触发这些优化。
结合你的场景:数据生成非即时、最终要处理300-400万行,批量20行是合理的起步选择——如果后续测试发现性能还有提升空间,还可以尝试更大的批次(比如100-1000行,具体取决于数据库类型和服务器配置),但20行已经能比单行插入带来显著的性能提升。
相关参考方向
你可以直接查阅以下官方文档的对应章节:
- MySQL:《MySQL 8.0 Reference Manual》中「INSERT Statement」的批量插入优化说明,以及「Optimizing Bulk Data Loading」部分。
- PostgreSQL:《PostgreSQL Documentation》中「INSERT」的批量操作说明,以及「COPY」命令的使用场景(若允许使用非标准SQL,COPY效率比批量INSERT更高)。
- 通用数据库性能优化指南:重点关注「批量操作」「事务提交优化」「网络开销降低」相关内容,几乎所有主流数据库的官方文档都会有这方面的性能建议。
内容的提问来源于stack exchange,提问作者Kendrick




