Используйте объединение или соединение - что быстрее [закрывается]

Я просто задаюсь вопросом, были ли у Вас таблица и Вы unioned это, это было бы больше efficent затем с помощью соединения??

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

24
задан OregonGhost 22 February 2010 в 09:39
поделиться

4 ответа

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

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

РЕДАКТИРОВАТЬ

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

РЕДАКТИРОВАТЬ 2 (Ответ на комментарий @seebiscuit)

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

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

UNION ALL Execution Plan

UNION ALL Execution Plan

JOIN Execution Plan

JOIN Execution Plan

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

На практике разница при поиске по кластерному индексу незначительна:

Benchmark Results

25
ответ дан 28 November 2019 в 22:48
поделиться

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

22
ответ дан 28 November 2019 в 22:48
поделиться

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

Объединение будет лучше использовать индексы, что может привести к более быстрому выполнению запроса.

2
ответ дан 28 November 2019 в 22:48
поделиться

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

  • он использует более легкую модель сбора статистики (основанную на кардинальности, а не на случайных погружениях)
  • запрос получит parsed только один раз (нет необходимости в оценке нескольких подвыборок)
  • resultset не будет материализован во временном (он получает даже для UNION ALL)
10
ответ дан 28 November 2019 в 22:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: