插入行 - 批量还是逐行?

时间:2013-11-08 18:26:18

标签: sql sql-server bulkinsert sql-insert

我使用存储在文件中的数百万个插入语句将数据插入数据库。是逐行插入还是批量插入更好?我不确定其含义是什么。 关于这种方法的任何建议?现在,我一次执行50K这些陈述。

4 个答案:

答案 0 :(得分:2)

一般来说,如果您知道插入不会因某种原因(即无效数据等)失败,那么批量插入会更好。如果你要逐行,你正在做的是打开数据连接,添加行,关闭数据连接。冲洗,在你的情况下重复几万次(或更多?)。与打开连接一次,一次性丢弃所有数据,然后关闭连接一次相比,这是一个巨大的性能损失。如果您的数据不是一组干净的数据,那么您可能最好逐行,因为如果要清理数据,批量插入不会失败。

答案 1 :(得分:2)

如果您正在使用SSIS,我建议将数据流任务作为另一种可能的途径。这将允许您从平面文本文件,SQL表或其他源移动数据并将其映射到新表中。我发现,性能总是非常好,而且我经常使用它。

如果在插入之前没有创建表,我的工作是使用表创建查询(CREATE TABLE ....等)将Execute SQL Task函数拖到我的进程中,并更新数据流函数的属性延迟验证。

只要我的数据结构一致,就可以了。这是一些截图。

SSIS Flow

Validation

答案 2 :(得分:0)

你绝对应该使用BULK INSERT而不是逐行插入。 BULK INSERT是用于将文本文件中的数据导入SQL Server的进程内方法,蚂蚁是The Data Loading Performance Guide在线文章中描述的其他方法中的禁区

答案 3 :(得分:0)

另一种方法是使用批处理,该处理使用基于集合的处理来处理较小的记录集(例如,一次5000个)。这可以防止服务器完全锁定,并且一次比一条记录快。