Чтобы объединить или объединить все, вот в чем вопрос - PullRequest
9 голосов
/ 12 октября 2010

У меня есть два запроса, которые я UNION собираю вместе, так что я уже знаю, что между этими двумя запросами не будет повторяющихся элементов. Следовательно, UNION и UNION ALL будут давать одинаковые результаты.

Какой я должен использовать?

Ответы [ 5 ]

23 голосов
/ 12 октября 2010

Вы должны использовать тот, который соответствует цели того, что вы ищете. Если вы хотите убедиться, что дубликатов нет, используйте UNION, в противном случае используйте UNION ALL. То, что ваши данные будут давать те же результаты прямо сейчас , не означает, что они всегда будут.

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

6 голосов
/ 12 октября 2010

Я вижу, что вы пометили этот вопрос как PERFORMANCE, поэтому я полагаю, что это ваше основное соображение.

UNION ALL будет превосходить UNION, поскольку SQL не нужно проверять два набора на наличие ошибок.

Если вам не нужен SQL для проверки дубликатов, всегда используйте UNION ALL.

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

Согласно http://blog.sqlauthority.com/2007/03/10/sql-server-union-vs-union-all-which-is-better-for-performance/ по крайней мере для производительности лучше использовать UNION ALL, так как он не распознает дубликаты активно и поэтому быстрее

1 голос
/ 12 октября 2010

Поскольку дубликатов от двух не будет, используйте UNION ALL. Вам не нужно проверять дубликаты, и UNION ALL выполнит задачу более эффективно.

1 голос
/ 12 октября 2010

Я бы все равно использовал UNION ALL.Даже если вы знаете, что дубликатов не будет, в зависимости от механизма сервера базы данных, он может этого не знать.

Итак, просто для предоставления дополнительной информации серверу БД взакажите для своего планировщика запросов лучший выбор (вероятно), используйте UNION ALL.

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

В любом случае это сильно зависит от сервера БД , который вы используете.

...