SQL:我应该使用INNER JOIN条件作为WHERE条件吗?

时间:2014-02-05 13:12:44

标签: mysql sql inner-join where-clause

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

由于JOIN类型为INNER,因此两个查询都将产生典型的结果集。

在性能方面哪个更好?

2 个答案:

答案 0 :(得分:0)

尝试检查您的查询计划,应该几乎相同。 此外,db引擎可以优化查询以获得更好的执行计划,因此应该没有区别

答案 1 :(得分: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列上使用索引。