哪个INSERT更快:使用VALUES还是使用SELECT / UNION ALL?

时间:2018-03-21 18:03:13

标签: sql sql-server database

SQL Server中哪个具有多行的INSERT语句更快?

此?

INSERT INTO dbo.MyTable (ID, Name)
SELECT 123, 'Timmy' UNION ALL
SELECT 124, 'Jonny' UNION ALL
...
SELECT 925, 'Sally'

还是这个?

INSERT INTO dbo.MyTable (ID, Name) VALUES
(123, 'Timmy'),
(124, 'Jonny'),
...
(925, 'Sally')

我尝试为每个18704行使用一个INSERT记录10行。 时间是(mm:ss)

  • SELECT/UNION ALL解决方案花了25:37
  • VALUES解决方案花了27:26

这是出乎意料的,因为我希望SELECT/UNION ALL解决方案会更慢,因为它是更明确的操作(SELECTUNION ALL)。

值得注意的是,这种表现并不好,因为它可能是肯定的瓶颈是另一回事,但我想知道这两种形式之间是否存在显着差异。

1 个答案:

答案 0 :(得分:1)

性能差异非常小。你不应该担心这些事情。

bulk insert数据可能更快。

如果您的插页花费的时间很长,那么您还有其他问题,很可能是:

  • 桌面上的争用(该表被其他进程锁定)。
  • 桌面上的触发器。
  • 很多的索引开销。
  • 使用复杂的用户定义函数检查约束。

您可能只是在其他进程中对表进行了大量争用。

您可能希望将insert拆分为较小的块。这样可以减少争用。