哪一个优于大量插入或UNION ALL? SQL Server

时间:2011-03-06 03:44:01

标签: sql sql-server-2008

使用什么更好:

INSERT #tableN (ID,NAME,Value) 
  SELECT 1, 'a', SUM(a) FROM tab UNION ALL
  SELECT 2, 'b', SUM(b) FROM tab UNION ALL
  SELECT 3, 'c', SUM(c) FROM tab UNION ALL 
  SELECT 4, 'd', SUM(d) FROM tab UNION ALL 
  SELECT 5, 'e', SUM(e) FROM tab UNION ALL 
  ...
  SELECT 3000, 'a3000', SUM(a3001) FROM tab UNION ALL 
  SELECT 3001, 'a3001', SUM(a3001) FROM tab 

INSERT #tableN (ID,NAME,Value) 
  SELECT 1 , 'a', SUM(a)
  FROM tab

INSERT #tableN (ID,NAME,Value) 
  SELECT 2, 'b', SUM(b)
  FROM tab

INSERT #tableN (ID,NAME,Value) 
  SELECT 3, 'c', SUM(c)
  FROM tab

INSERT #tableN (ID,NAME,Value) 
  SELECT 4, 'd', SUM(d)
  FROM tab
...
INSERT #tableN (ID,NAME,Value) 
  SELECT 3001, 'a30001', SUM(a3001)
  FROM tab

2 个答案:

答案 0 :(得分:3)

好像你想要旋转表来创建一个新表。除了编写(或生成)所有SQL之外,还有更简洁的方法。仔细研究PIVOT和UNPIVOT。它允许您将列转换为行,并提供对中间结果集的过滤。您可能需要找到与旋转相关的更多资源,但如果您决定考虑此选项,上面的链接应该会很好地启动。

答案 1 :(得分:2)

@Josh对您的案例有正确的答案,但如果您想知道多个INSERT或一个INSERTUNION ALLINSERTUNION ALL插入大量数据时,{1}}会更快。

来自this post的评论:

I try to execute 400 insert statements to table about 20 columns (int or float). Regarding performance there is MUCH difference. ;)

INSERT statements way: about 5 seconds
INSERT SELECT UNION ALL way: 40 miliseconds!!!