SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name
SELECT * FROM TableA, TableB
where TableA.name = TableB.name
Который является предпочтительным путем и почему? Будет какое-либо различие в производительности, когда ключевые слова как СОЕДИНЕНИЕ будут использоваться?
Спасибо
Второй способ - это классический способ сделать это до того, как существовало ключевое слово join
.
Обычно обработчик запросов генерирует одни и те же операции с базой данных из двух запросов, поэтому разницы в производительности не будет.
Использование join
лучше описывает то, что вы делаете в запросе. Если у вас много объединений, это также лучше, потому что объединенная таблица и ее условие находятся рядом друг с другом, вместо того, чтобы помещать все таблицы в одно место, а все условия в другое.
Другой аспект заключается в том, что легче выполнить неограниченное соединение по ошибке, используя второй способ, в результате чего перекрестное соединение будет содержать все комбинации из двух таблиц.
Большинство современных баз данных оптимизируют оба этих запроса в один и тот же план выполнения. Однако используйте первый синтаксис, это текущий стандарт. Изучение и использование этого синтаксиса соединения поможет вам при выполнении запросов с LEFT OUTER JOIN
и RIGHT OUTER JOIN
. которые становятся сложными и проблематичными при использовании старого синтаксиса с объединениями в предложении WHERE.
В некоторых механизмах SQL вторая форма (ассоциативные соединения) не используется. Воспользуйтесь первой формой.
Второй менее явный, заставляет начинающих SQL останавливаться при написании кода. Гораздо сложнее управлять в сложном SQL из-за того, что последовательность требования соответствия соединения должна соответствовать последовательности предложения WHERE - они (последовательность в коде) должны совпадать, или возвращаемые результаты изменятся, что приведет к изменению возвращаемого набора данных, что действительно противоречит мысль о том, что последовательность не должна изменять результаты, когда рассматриваются элементы на одном уровне.
Когда создаются объединения, содержащие несколько таблиц, это ДЕЙСТВИТЕЛЬНО сложно кодировать, причем довольно быстро при использовании второй формы.
РЕДАКТИРОВАТЬ: Производительность: я считаю, что кодирование, простота отладки являются частью личной производительности, поэтому простота редактирования / отладки / обслуживания лучше при использовании первой формы - мне просто требуется меньше времени, чтобы делать / понимать вещи во время разработки и сопровождения циклы.
узнать с помощью EXPLAIN SELECT…
это зависит от используемого механизма, от оптимизатора запросов, от ключи на столе; почти по всему
Используйте первый, так как он:
Что касается производительности - разницы быть не должно.