SQL «ON» предложение по оптимизации - PullRequest
2 голосов
/ 07 февраля 2009

Какой запрос будет выполняться быстрее?

SELECT * FROM topic_info
    LEFT JOIN topic_data ON topic_info.id = topic_data.id
WHERE id = ?

или

SELECT * FROM topic_info
    LEFT JOIN topic_data ON topic_data.id = topic_info.id
WHERE id = ?

Разница заключается в порядке выражений в предложении «ON»: первый запрос проверяет topic_info.id по topic_data.id, второй topic_data.id по topic_info. Какой запрос обычно выполняется быстрее?

(я знаю, что ни один запрос не будет проанализирован из-за неоднозначного столбца "id", но давайте проигнорируем это)

Ответы [ 5 ]

4 голосов
/ 07 февраля 2009

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

3 голосов
/ 07 февраля 2009

Остальные постеры верны, не имеет значения, в каком направлении вы выражаете соединение.

Это потому, что они оптимизатор запросов определит наиболее эффективный метод и, конечно, план запроса для вашего запроса. Это произойдет независимо от того, как вы упорядочите оператор соединения.

Надеюсь, это все прояснит для вас, однако, пожалуйста, не стесняйтесь запрашивать дополнительную информацию.

Ура, Джон

3 голосов
/ 07 февраля 2009

Это вероятно не имеет значения, но протестируйте его.

Если вы используете MySQL, попробуйте «объяснить выбор ...» - он скажет вам, что вам нужно знать.

2 голосов
/ 07 февраля 2009

Не вернут ли они немного другие результаты?

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

Или я неправильно понял?

РЕДАКТИРОВАТЬ: я неправильно понял - только что сделал несколько тестов. Та комментаторам за то, что поправил меня.

2 голосов
/ 07 февраля 2009

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

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