2009-11-09 95 views

回答

6

BULK INSERT与SQL Server的数据库引擎在进程中运行,因此避免了通过客户端API的网络层传递数据 - 这使得它比BCP和DTS/SSIS更快。

此外,使用BULK INSERT,您可以指定数据的ORDER BY,如果这与表的PK相同,则锁定发生在PAGE级别。写入事务日志发生在页面级别而不是行级别。

在常规INSERT的情况下,锁定和事务日志写入处于行级别。这使得BULK INSERT比INSERT语句更快。

1

至少它可以避免为要插入的每条记录创建和提交事务的开销。还有其他的节省:例如,在整个网络中传送更大的数据块,而不是一次一个记录将有所帮助。

然后,也许更有趣的是,DB实现者可以(我不知道是否有任何特定的供应商实际做到这一点)开始变得聪明 - 他们可以查看要插入的记录集,而不是重新组织数据页容纳单个记录可以对页面进行批量重组以允许新的插入,同样我们可以想象,如果我们知道我们插入一组记录,则可以更有效地完成混洗索引。

0

它在内部转换为OLEDB记录集,然后加载表。

我还没有给它太多想法,但我认为这是在SQL Server框而不是客户端上运行时更快。另外,您可以管理您无法使用正常INSERT的约束条件

From BOL