Какой из них быстрее? - PullRequest
1 голос
/ 08 октября 2009

Какой из них быстрее?

SELECT FROM A INNER JOIN B ON A.ID = B.ID

... или:

SELECT FROM A , B WHERE A.ID = B.ID

Ответы [ 7 ]

22 голосов
/ 08 октября 2009

Я не думаю, что одно быстрее другого, но одно лучше использовать, чем другое:

SELECT (fields)
FROM A
INNER JOIN B ON A.ID = B.ID

, безусловно, является предпочтительным способом выражения этого (и соответствует стандарту ANSI SQL для синтаксиса соединения). Понятнее, для наблюдателя более очевидно, что именно здесь происходит.

Всегда используйте этот синтаксис поверх другого - он проще и понятнее!

PS: гуру SQL Аарон Бертран, похоже, согласен :-) Плохие привычки: использовать JOIN в старом стиле

6 голосов
/ 08 октября 2009

Мера, не угадай.

Некоторые СУБД будут выполнять явные объединения быстрее, чем неявные, но это полностью зависит от самой СУБД (та, которую я использую, достаточно умна, чтобы выполнять обе операции на полной скорости).

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

Это потому, что производительность изменяется в зависимости от данных в таблицах.

Итак, вы должны не беспокоиться о том, насколько быстро эти два запроса будут выполняться, пока не возникнет проблема с производительностью. Используйте свои лучшие предположения (с индексами и тому подобным), но следите за тем, какова реальная производительность, в production , и скорректируйте ее.

См. Также здесь .

5 голосов
/ 08 октября 2009

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

4 голосов
/ 08 октября 2009

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

2 голосов
/ 08 октября 2009

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

Вам нужно как минимум указать столбец или константу или даже * в предложении SELECT.

2 голосов
/ 08 октября 2009

Проверьте план выполнения для обоих запросов, сделайте свои выводы из этого.

0 голосов
/ 08 октября 2009

Разве они не одинаково быстры? Потому что они в основном переводят на одно и то же ....

Если вы хотите знать наверняка, возможно, вы могли бы создать простой тестовый пример и выполнить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...