Sql 大容量插入如何在内部工作?

Sql 大容量插入如何在内部工作?,sql,sql-server,tsql,bulkinsert,Sql,Sql Server,Tsql,Bulkinsert,有人能解释一下大容量插入在内部是如何工作的,为什么它比正常的插入操作快得多 问候,, Shishir。批量插入与SQL Server的数据库引擎一起运行,因此避免了通过客户端API的网络层传递数据-这使其比BCP和DTS/SSI更快 另外,使用大容量插入,您可以指定数据的顺序,如果这与表的主键相同,那么锁定将在页面级别发生。对事务日志的写入发生在页面级别,而不是行级别 在常规插入的情况下,锁定和事务日志写入位于行级别。这使得批量插入比INSERT语句更快。至少它可以避免为每个要插入的记录创建和提

有人能解释一下大容量插入在内部是如何工作的,为什么它比正常的插入操作快得多

问候,,
Shishir。

批量插入与SQL Server的数据库引擎一起运行,因此避免了通过客户端API的网络层传递数据-这使其比BCP和DTS/SSI更快

另外,使用大容量插入,您可以指定数据的顺序,如果这与表的主键相同,那么锁定将在页面级别发生。对事务日志的写入发生在页面级别,而不是行级别


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

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


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

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

我没有过多考虑,但我认为在SQLServer机器上运行比在客户机上运行更快。此外,您还可以管理常规插入无法管理的约束