Я думаю, что вы должны работать, принимая во внимание два фактора:
- Характеристики оборудования и сервера
- Размер данных
Если вы соответствуете характеристикам машиныработа с ним не очень производительна, и у вас огромный размер данных, тогда распределение операции INSERT
(множественная INSERT) повысит производительность, поскольку она не будет потреблять память, как операция UNION
.Если размер данных является приемлемым и может обрабатываться выделенной памятью SQL Server, то следует использовать общее табличное выражение с запросом SELECT INTO
:
WITH CTE_1 as (SELECT * FROM TABLE_1
UNION ALL
SELECT * FROM TABLE_2
UNION ALL
SELECT * FROM TABLE_3)
SELECT *
INTo New_Table
FROM CTE_1
Также обратите внимание на разницу между UNION
и UNION ALL
операции :
Оператор UNION эффективно выполняет SELECT DISTINCT для набора результатов.Если вы знаете, что все возвращаемые записи уникальны для вашего объединения, используйте UNION ALL, это даст более быстрые результаты.Также старайтесь избегать INSERT INTO
и использовать вместо него SELECT INTO
, поскольку записывается в журнал минимально, при условии, что установлены правильные флаги трассировки .
Еще одна вещь, которую стоит упомянуть, (яне тестировал этот подход, но, возможно, он должен дать лучшую производительность - и это может привести к огромному размеру индекса) вам также следует попытаться создать индексированное представление для всех таблиц (запрос UNIONВы упомянули) , затем выполните запрос, например:
SELECT * INTO ... FROM vw_Unified
Обновление 1
Если вы знакомы с SSIS, выполнение процесса импорта данных может повысить производительность при использованииSSIS: