为什么批量导入比INSERT更快?

zer*_*_ik 7 sql sql-server performance bulkinsert sql-insert

我正在编写关于将数据从文件导入SQL Server表的方法的研究生工作.我已经创建了自己的程序,现在我将它与一些标准方法进行比较,如bcp,BULK INSERT,INSERT ... SELECT*FROM OPENROWSET(BULK ...).我的程序从文件中读取行,解析它们并使用普通的INSERT逐个导入它们.我生成的文件有100万行,每行有4列用于测试.现在我的情况是我的程序工作160秒,而标准方法工作5-10秒.

那么问题是为什么BULK操作比100万INSERT更快?他们是否使用特殊手段?你可以解释一下,还是给我一些有用的链接?谢谢!

Hyb*_*s95 8

BULK INSERT可以是最小化记录操作(取决于各种参数,如索引,表的约束,数据库的恢复模型等).最小化记录的操作仅记录分配和解除分配.在BULK INSERT的情况下,仅记录范围分配而不是插入的实际数据.这将提供比INSERT更好的性能.

比较批量插入与插入

实际的优点是减少事务日志中记录的数据量.
在BULK LOGGED或SIMPLE恢复模型的情况下,优势是显着的.

优化BULK导入性能

您还应该考虑阅读以下答案:插入表格select*from table vs bulk insert

顺便说一下,有些因素会影响BULK INSERT性能:

表是否具有约束或触发器,或两者都有.

数据库使用的恢复模型.

复制数据的表是否为空.

表是否有索引.

是否指定了TABLOCK.

是从单个客户端复制数据还是从多个客户端并行复制数据.

是否要在运行SQL Server的两台计算机之间复制数据.