Подтвердить что ты не робот

Использовать союз или присоединиться - что быстрее

Мне просто интересно, есть ли у вас таблица, и вы объединили ее, было бы лучше, чем использовать соединение?

Я знаю, что объединение создает больше столбцов, но это более теоретично. Будет ли профсоюз делать просмотр вложенного цикла другой таблицы, такой как объединение, должно быть?

4b9b3361

Ответ 1

Союз будет быстрее, поскольку он просто передает первый оператор SELECT, а затем анализирует второй оператор SELECT и добавляет результаты в конец выходной таблицы.

Присоединиться будет проходить через каждую строку обеих таблиц, нахождение совпадений в другой таблице, поэтому требуется намного больше обработки из-за поиска совпадающих строк для каждой строки.

ИЗМЕНИТЬ

В союзе я имею в виду Союз Все, поскольку он казался адекватным тому, чего вы пытались достичь. Хотя обычный союз обычно быстрее, чем Join.

EDIT 2 (Ответ на комментарий @seebiscuit)

Я не согласен с ним. Технически говоря, независимо от того, насколько хорошо ваше участие, "JOIN" по-прежнему дороже, чем чистая конкатенация. Я сделал сообщение в блоге, чтобы доказать это в моем блоге codePERF [точка] net. Практически говоря, сервер 2 совершенно разные цели, и более важно убедиться, что вы индексируете правильно и с помощью подходящего инструмента для работы.

Технически я думаю, что это можно суммировать, используя следующие 2 плана выполнения, взятые из моего сообщения в блоге:

UNION ALL План выполнения

UNION ALL Execution Plan

JOIN План выполнения

СОХРАНИТЬ План выполнения

Практические результаты

Практически различие в поиске кластерного индекса незначительно:

Результаты тестов

Ответ 2

JOIN и UNION имеют две разные цели. JOIN используется для добавления дополнительных таблиц в запрос с целью добавления критериев выбора и, возможно, дополнительных столбцов. UNION используется для объединения результатов двух разных запросов с одинаковыми столбцами. Спросить, что более эффективно, - это спросить, какая из "буханки хлеба" и "дующего ветра" более "оранжевая".

Ответ 3

Извините, что сломал вашу партию, но хорошо написанное соединение будет быстрее, чем объединение.

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

Ответ 4

Один SELECT будет использовать не более одного индекса для каждой таблицы. UNION будет использовать не более одного индекса для SELECT в союзе.

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