производительность союза против союза всех

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

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

вопрос задан 2.09.2010
LaBracca
4420 репутация

5 ответов


  • 20 рейтинг

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

    ответ дан Joe Stefanelli, с репутацией 107882, 2.09.2010
  • 5 рейтинг

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

    ответ дан Michael Pakhantsov, с репутацией 19144, 2.09.2010
  • 3 рейтинг

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

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

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

    ответ дан Vijjendra, с репутацией 7165, 14.10.2010
  • 1 рейтинг

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

    ответ дан Philip Kelley, с репутацией 32114, 2.09.2010
  • 0 рейтинг

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

    ответ дан Mike Ritacco, с репутацией 8524, 4.09.2010