Да, как уже говорили другие, результат одинаков для всех этих запросов.
FWIW, вы также можете использовать этот сокращенный синтаксис, когда вы делаете равное объединение для имен столбцов, которые одинаковы в обеих таблицах:
SELECT t1.x, t2.y from t1 join t2 using (a, b, c);
Что касается оптимизации, то следует оптимизировать так же. То есть СУБД должна быть достаточно умной, чтобы анализировать синтаксис WHERE
и выполнять соединения вместо генерации промежуточного огромного результата перекрестного объединения и применения к нему условий фильтрации. Это настолько распространенный тип запросов, что для конкретной реализации СУБД также характерно распознавать и оптимизировать его.
В случае MySQL, join и где (вид) оцениваются вместе. Попробуйте использовать EXPLAIN
для анализа вашего запроса. Если в столбце «type
» указано «eq_ref
», это означает, что он использует индексированное соединение. Это лучший тип объединения с точки зрения оптимизации. Если "type
" равно "ref
", это тоже хорошо.
Эти типы оптимизации объединения можно получить независимо от того, помещаете ли вы условие в предложение JOIN...ON
или в предложение WHERE
.