СОЮЗ против ОТЛИЧИЯ в производительности - PullRequest
2 голосов
/ 04 октября 2010

В SQL 2008 у меня такой запрос:

QUERY A
UNION 
QUERY B
UNION 
QUERY C

Будет ли он медленнее / быстрее, чем помещать результат всех трех запросов, скажем, во временную таблицу, а затем SELECT с их DISTINCT?

Ответы [ 2 ]

2 голосов
/ 17 октября 2010

Это зависит от запроса - не зная сложности запросов A, B или C, это не тот вопрос, на который можно ответить, поэтому вам лучше всего составить профиль, а затем судить на основе этого.1003 * Однако ... Я бы, наверное, пошел с объединением независимо: временная таблица может быть довольно дорогой, особенно потому, что она становится большой.Помните, что с временной таблицей вы явно создаете дополнительные операции и, следовательно, больше операций ввода-вывода, чтобы перегружать дисковую подсистему.Если вы можете сделать выбор, не прибегая к временной таблице, это всегда (вероятно) будет быстрее.

Там должно быть исключение (или семь) из этого правила, поэтому вам лучше профилироватьс реально большим набором данных, чтобы убедиться, что вы получите надежные цифры для принятия подходящего решения.

0 голосов
/ 04 октября 2010

DISTINCT и UNION означают совершенно разные задачи.Первый исключает, а второй объединяет наборы результатов.Я не знаю, что вы хотите сделать, но, похоже, вам нужны отдельные строки из 3 разных запросов с объединенными результатами.В этом случае:

query A UNION query B......

, что будет самым быстрым, в зависимости, конечно, от того, что вы хотите сделать.

...