【问题标题】:How does BULK INSERT work internally?BULK INSERT 如何在内部工作?
【发布时间】:2009-11-09 16:54:12
【问题描述】:

谁能解释一下 BULK INSERT 在内部是如何工作的,为什么它比正常的 INSERT 操作快得多?

问候, 希希尔。

【问题讨论】:

    标签: sql sql-server tsql bulkinsert


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        我没有考虑太多,但我认为在 SQL Server 机器上运行而不是在客户端上运行会更快。另外,您可以管理普通 INSERT 无法管理的约束

        From BOL

        【讨论】:

          猜你喜欢
          • 2019-08-30
          • 2020-11-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-11
          • 1970-01-01
          相关资源
          最近更新 更多