2014-02-05 5 views
0

Shuold Я использую INNER JOIN условия как условия WHERE? Рассмотрим эти два примера запросов, чтобы объяснить вопрос:SQL: Shuold Я использую условия INNER JOIN как условия WHERE?

SELECT t1.*, t2.* 
FROM table1 AS t1 
INNER JOIN table2 AS t2 
    ON t1.id = t2.foreign_key 
WHERE t1.year < 2014 

и это без WHERE пункта

SELECT t1.*, t2.* 
FROM table1 AS t1 
INNER JOIN table2 AS t2 
    ON t1.id = t2.foreign_key 
     AND t1.year < 2014 

Поскольку тип соединения является ВНУТРЕННИЙ, оба запроса приведет на типичный набор результатов.

Что лучше с точки зрения производительности?

+0

спасибо @Sergio за аккуратное редактирование .. не знал, как – rahmanisback

+0

возможный дубликат [INNER JOIN ON vs WHERE clause] (http://stackoverflow.com/questions/1018822/inner-join-on-vs- where-clause) – rahmanisback

ответ

0

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

Обычно я использую предложение WHERE, так как имеет условие простого соединения, убедитесь, что будет использоваться индексное сканирование (если имеется соответствующий индекс).

Для eaxample, если вы немного изменить в запросе (см условия заказа):

SELECT t1.*, t2.* 
FROM table1 AS t1 
INNER JOIN table2 AS t2 
    ON t1.year < 2014 
     AND t1.id = t2.foreign_key 

Некоторые оптимизатора двигатели могут принять решение не использовать индекс на t2.foreign_key колонке.

+0

Интересно. Предполагая, что есть индекс на t2.foreign_key и индекс на t1.year, было бы эффективным, чтобы движок мог перевернуть порядок этих двух условий, используя индексы, чтобы ограничить результат, и только сканирование результатов для другого (год) состояние, нет таблица скан. – rahmanisback

0

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

Смежные вопросы