我正在使用存储在文件中的数百万条插入语句将数据插入数据库。是逐行插入还是批量插入更好?我不确定会产生什么影响。对这种方法有什么建议吗?现在,我一次执行 50K 这些语句。
4 回答
如果您使用的是 SSIS,我建议将数据流任务作为另一种可能的途径。这将允许您从平面文本文件、SQL 表或其他源中移动数据并将其映射到您的新表中。我发现,性能总是很好,我经常使用它。
如果您的表没有在插入之前创建,我所做的是使用表创建查询(CREATE TABLE....等)将执行 SQL 任务函数拖到我的进程中,并更新数据流函数上的属性以延迟验证.
只要我的数据结构一致,就可以。这是几个屏幕截图。
一般来说,如果您知道插入不会因某种原因(即无效数据等)而失败,那么您最好批量插入。如果您要逐行进行,那么您正在做的是打开数据连接,添加行,关闭数据连接。冲洗洗涤,在您的情况下重复数万次(或更多?)。与打开连接一次,一次转储所有数据,然后关闭连接一次相比,这是一个巨大的性能损失。如果您的数据不是一组干净的数据,则最好逐行进行,因为如果您有要清理的数据,批量插入不会失败。
您绝对应该使用 BULK INSERT 而不是逐行插入。BULK INSERT 是设计用于将数据从文本文件导入 SQL Server 的进程内方法,它是“数据加载性能指南”在线文章中描述的其他方法中最常用的方法
另一种选择是使用批处理,该批处理对较小的记录集(例如一次 5000 个)使用基于集的处理。这可以防止服务器被完全锁定,并且比一次记录一个记录要快。