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,因此两个查询都将产生典型的结果集。
在性能方面哪个更好?
答案 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列上使用索引。