BULK INSERT如何在内部工作?

时间:2009-11-09 16:54:13

标签: sql sql-server tsql bulkinsert

有人可以解释BULK INSERT如何在内部工作,为什么它比正常的INSERT操作快得多?

此致 Shishir。

3 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

我没有多想,但我认为在SQL Server盒而不是客户端上运行时会更快。另外,您可以管理普通INSERT无法实现的约束

From BOL