Подтвердить что ты не робот

Производительность MySQL: JOIN ON vs. WHERE

Возможные дубликаты:
MySQL: Внутреннее соединение vs Где
Явное vs неявное объединение SQL

Есть ли какая-либо разница в производительности, когда мы запускаем запросы присоединения, используя предложение "JOIN ON" и "WHERE"? (независимо от количества таблиц или количества записей в таблицах)

Не уверен, обсуждалась ли эта тема. Даже если это так, я хочу знать, изменились ли последние версии mySQL (5.1 и выше).

В заявлении "Объяснение" четко указывается большая разница в количестве строк, взятых для рассмотрения.

Синтаксис, который я использую, это:

Использование JOIN ON

SELECT <field names>
FROM <table1>
JOIN <table2> ON <join_condition>
AND JOIN <table3> ON <join_condition> 
AND JOIN <table4> ON <join_condition> 
.... 

Использование WHERE

SELECT <field names> 
FROM <table names list separated by comma> 
WHERE <join_condition> 
AND <join_condition> 
AND <join_condition> 
.... 

Так что не уверен, изменится ли использование предложения JOIN ON или WHERE. Пожалуйста помогите.

4b9b3361

Ответ 1

Я подозреваю, что использование "JOIN" делает "LEFT JOIN". Попробуйте использовать "INNER JOIN" и посмотрите, является ли инструкция объяснения одинаковой.

SELECT <field names>
FROM <table1>
INNER JOIN <table2> ON <join_condition>
INNER JOIN <table3> ON <join_condition> 
INNER JOIN <table4> ON <join_condition> 
...

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

Ответ 2

Вот хороший анализ этих двух подходов: SQL left join vs несколько таблиц в строке FROM?

Это объяснение является общим, я не слишком уверен в том, что делает MySQL в этом вопросе; но в любом случае суть состоит в том, что JOIN всегда более ясен и понятен и может перемещаться из одного движка в другой без существенных изменений в логике запроса.