Ключевые слова ВНУТРЕННЕГО ОБЪЕДИНЕНИЯ | с и не используя их

SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name

SELECT * FROM TableA, TableB
where TableA.name = TableB.name

Который является предпочтительным путем и почему? Будет какое-либо различие в производительности, когда ключевые слова как СОЕДИНЕНИЕ будут использоваться?

Спасибо

8
задан jai 16 April 2010 в 10:27
поделиться

5 ответов

Второй способ - это классический способ сделать это до того, как существовало ключевое слово join .

Обычно обработчик запросов генерирует одни и те же операции с базой данных из двух запросов, поэтому разницы в производительности не будет.

Использование join лучше описывает то, что вы делаете в запросе. Если у вас много объединений, это также лучше, потому что объединенная таблица и ее условие находятся рядом друг с другом, вместо того, чтобы помещать все таблицы в одно место, а все условия в другое.

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

11
ответ дан 5 December 2019 в 10:40
поделиться

Большинство современных баз данных оптимизируют оба этих запроса в один и тот же план выполнения. Однако используйте первый синтаксис, это текущий стандарт. Изучение и использование этого синтаксиса соединения поможет вам при выполнении запросов с LEFT OUTER JOIN и RIGHT OUTER JOIN . которые становятся сложными и проблематичными при использовании старого синтаксиса с объединениями в предложении WHERE.

0
ответ дан 5 December 2019 в 10:40
поделиться

В некоторых механизмах SQL вторая форма (ассоциативные соединения) не используется. Воспользуйтесь первой формой.

Второй менее явный, заставляет начинающих SQL останавливаться при написании кода. Гораздо сложнее управлять в сложном SQL из-за того, что последовательность требования соответствия соединения должна соответствовать последовательности предложения WHERE - они (последовательность в коде) должны совпадать, или возвращаемые результаты изменятся, что приведет к изменению возвращаемого набора данных, что действительно противоречит мысль о том, что последовательность не должна изменять результаты, когда рассматриваются элементы на одном уровне.

Когда создаются объединения, содержащие несколько таблиц, это ДЕЙСТВИТЕЛЬНО сложно кодировать, причем довольно быстро при использовании второй формы.

РЕДАКТИРОВАТЬ: Производительность: я считаю, что кодирование, простота отладки являются частью личной производительности, поэтому простота редактирования / отладки / обслуживания лучше при использовании первой формы - мне просто требуется меньше времени, чтобы делать / понимать вещи во время разработки и сопровождения циклы.

1
ответ дан 5 December 2019 в 10:40
поделиться

узнать с помощью EXPLAIN SELECT…

это зависит от используемого механизма, от оптимизатора запросов, от ключи на столе; почти по всему

1
ответ дан 5 December 2019 в 10:40
поделиться

Используйте первый, так как он:

  • Более явный
  • Это стандартный способ

Что касается производительности - разницы быть не должно.

3
ответ дан 5 December 2019 в 10:40
поделиться
Другие вопросы по тегам:

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