【问题标题】:tsql - Batch insert performancetsql - 批量插入性能
【发布时间】:2014-09-17 00:10:16
【问题描述】:

我想提高我正在处理的应用程序上某些插入的速度。 我最初创建了一个这样的批次:

insert tableA (field1, field2) values (1,'test1'), (2, 'test2')

这在 SQL Server 2008 及更高版本上运行良好,但我需要插入才能在 SQL Server 2005 上工作。我的问题是使用这样的批处理可以获得任何性能优势:

insert tableA (field1, field2)
select 1, 'test1'
union all
select 2, 'test2'

这批:

insert tableA (field1, field2) values (1, 'test1')
insert tableA (field1, field2) values (2, 'test2')

【问题讨论】:

    标签: tsql sql-server-2005


    【解决方案1】:

    虽然看起来处理的代码越少应该可以提高性能,但使用第一个选项(全部联合)是个坏主意。 在将数据插入表之前,必须解析和执行所有选择语句。它会消耗大量内存,即使对于相当少量的数据也可能需要很长时间才能完成。另一方面,单独的插入语句是“即时”执行的。

    在 SSMS 中运行一个简单的测试来证明这一点:创建一个包含 4 个字段的简单表并尝试插入 20k 行。第二个解决方案将在几秒钟内执行,而第一个......你会看到:)。

    另一个问题是,当 som 行中的数据不正确时(例如类型不匹配),您将收到类似 Conversion failed when converting the varchar value 'x' to data type int. 的错误,但您不会知道哪一行失败 - 您必须自己找。但是使用单独的插入,您将确切知道哪个插入失败。

    【讨论】:

      猜你喜欢
      • 2011-04-07
      • 2013-07-12
      • 2011-02-28
      • 2012-01-28
      • 2018-10-11
      • 2012-04-02
      • 1970-01-01
      相关资源
      最近更新 更多