производительность союза против союза всех - PullRequest
16 голосов
/ 02 сентября 2010

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

Лучше ли использовать UNION или UNION ALL с точки зрения производительности, если я уверен, что таблицы возвращают разные записи?

Ответы [ 5 ]

25 голосов
/ 02 сентября 2010

UNION ALL будет работать лучше, чем UNION, когда вы не беспокоитесь об удалении дублирующихся записей, поскольку избегаете дорогостоящей операции отдельная сортировка .См .: SQL SERVER - Разница между Union и Union All - Сравнение оптимальной производительности

5 голосов
/ 02 сентября 2010

UNION ALL всегда быстрее, потому что UNION исключает повторяющиеся записи

4 голосов
/ 14 октября 2010

UNION реализует внутри себя два запроса.1. SELECT, который вернет набор данных 2. DISTINCT.Любой, кто изучал внутренние компоненты базы данных, может легко понять, что предложение DISTINCT чрезвычайно дорого с точки зрения обработки.

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

UNION ALL будет таким же, как UNION, за исключением того, что он не запускает DISTINCT внутренне избавляющих нас от дорогостоящих операций

1 голос
/ 02 сентября 2010

Лучше использовать UNION ALL, когда вы знаете, что хотите получить все строки результатов, независимо от того, знаете ли вы, что они будут различаться или нет.UNION без "all" будет всегда выполнять "отдельную проверку" независимо от того, какие данные на самом деле.

0 голосов
/ 05 сентября 2010

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

...