Использовать союз или присоединиться - что быстрее
Мне просто интересно, есть ли у вас таблица, и вы объединили ее, было бы лучше, чем использовать соединение?
Я знаю, что объединение создает больше столбцов, но это более теоретично. Будет ли профсоюз делать просмотр вложенного цикла другой таблицы, такой как объединение, должно быть?
Ответы
Ответ 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 будет лучше использовать индексы, которые могут привести к более быстрому запросу.