TSQL - 批量插入性能(tsql - Batch insert performance)

2019-10-20 13:14发布

我想提高一些刀片的速度对我工作的应用程序。 我原本创作了一批这样的:

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')

Answer 1:

Altough它可能看​​起来工艺更少的代码应该给你一个性能增益,使用第一个选项(UNION ALL)是一个坏主意。 所有SELECT语句都将数据插入到表之前被解析和执行。 它会消耗大量的内存和可能需要很久才能完成,即使数据的量非常小。 在另一方面单独插入语句“对飞”执行。

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

另一个问题是,当数据在索姆行(例如类型不匹配)不正确,你会喜欢收到错误Conversion failed when converting the varchar value 'x' to data type int. ,但你有没有指示失败的行 - 你必须自己找到它。 但有独立的刀片,你就会知道到底是哪插入失败。



文章来源: tsql - Batch insert performance