Какой из них превосходит: много вставок ИЛИ UNION ALL? SQL Server - PullRequest
4 голосов
/ 06 марта 2011

Что лучше использовать:

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 ]

3 голосов
/ 06 марта 2011

Похоже, вы хотите повернуть таблицу, чтобы создать новую таблицу. Есть более простые способы сделать это, чем писать (или генерировать) весь этот SQL. Посмотрите на PIVOT и UNPIVOT особенно. Это позволяет преобразовывать столбцы в строки и обеспечивать фильтрацию по промежуточному набору результатов. Возможно, вам понадобится найти дополнительные ресурсы, связанные с поворотом, но приведенная выше ссылка поможет вам достаточно хорошо начать работу, если вы решите рассмотреть этот вариант.

2 голосов
/ 27 апреля 2011

@ Джош имеет правильный ответ для вашего случая, но если вам интересно, если несколько INSERT с или один INSERT с UNION ALL, то одиночный INSERT с UNION ALL быстрее при вставкемного данных.

Из комментариев к этой записи :

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!!!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...