Производительность 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. Пожалуйста помогите.
Ответы
Ответ 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 всегда более ясен и понятен и может перемещаться из одного движка в другой без существенных изменений в логике запроса.