我想知道在性能方面哪种方法更好:将条件放在JOIN中(x JOIN y on x.hi = y.hi AND ....),还是将其放在WHERE下,仅将JOIN与交叉条件配合使用。
谢谢大家。
谢谢大家。
这将取决于查询优化引擎以及它如何将查询分解为其逻辑查询运算符。
使用MS SQL Server,您可以查看执行计划,但通常没有区别,因为优化器会将两种方式视为等效。
在StackOverflow上有一个类似的问题这里。
这主要取决于你喜欢哪种语法。我理解的是,SQL优化器应该能够在性能上几乎没有区别的情况下评估它们。
我认为这两种方法都不会对性能产生影响(大多数数据库可以优化这种情况),但如果你使用左连接,它们可能会对结果产生影响。
SELECT a.field1
, a.field2
, b.field3
FROM table1 a
LEFT JOIN table2 b
ON a.id = b.id
WHERE a.field5 = 'test'
AND b.field3 = 1
SELECT a.field1
, a.field2
, b.field3
FROM table1 a
LEFT JOIN table2 b
ON a.id = b.id AND b.field3 = 1
WHERE a.field5 = 'test'
在 SQL Server 2008 R2 中,您不能在 WHERE 子句中使用 *=
和 =*
外连接语法。
我不希望看到一个混合了这两种风格的查询。