BULK INSERT内部工作原理是什么?

11

请问有人可以解释一下BULK INSERT内部是如何工作的,为什么它比普通的INSERT操作快得多?

谢谢, Shishir。

3个回答

8
BULK INSERT 是在 SQL Server 数据库引擎中运行的,因此避免了通过客户端 API 的网络层传递数据 - 这使它比 BCP 和 DTS / SSIS 更快。
此外,使用 BULK INSERT,您可以指定数据的 ORDER BY,如果这与表的 PK 相同,则锁定发生在 PAGE 级别。事务日志的写入也是在页面级别而不是行级别进行的。
对于常规的 INSERT,锁定和事务日志的写入是在行级别进行的。这使得 BULK INSERT 比 INSERT 语句更快。

1

至少可以避免为每个要插入的记录创建和提交事务的开销。还有其他节约措施:例如,一次性将更大的数据块跨网络发送而不是一条记录一次发送,将有助于节省时间。

然后,也许更有趣的是,数据库实现者可以(我不知道是否有任何特定的供应商实际这样做)开始变得聪明——他们可以查看要插入的记录集,而不是重新组织包含单个记录的数据页,可以对页面进行大规模的重组以允许新插入,同样,如果我们知道正在插入一组记录,那么重排索引可能更有效率。


0

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

我没有仔细考虑过,但我认为在SQL Server框中运行时比在客户端上运行更快。此外,您可以管理普通插入无法管理的约束条件

来自BOL


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接