3

我想知道什么是更好的性能:将条件放在 JOIN 中?(x JOIN y on x.hi = y.hi AND ....) 或者把它放在 WHERE 下,只留下交叉条件的 JOIN。

谢谢大家

4

4 回答 4

2

这将取决于查询优化引擎以及它如何将查询分解为其逻辑查询运算符。

使用 MS SQL Server,您可以查看执行计划,但通常没有区别,因为优化器会将两种方式视为等效。

于 2010-01-28T14:33:20.760 回答
1

StackOverflow 上有一个类似的问题

这在很大程度上只是您喜欢哪种语法的问题。我的理解是 SQL 优化器应该能够在性能上几乎没有差异的情况下评估它们。

于 2010-01-28T14:33:49.110 回答
0

我认为两者都不应该产生性能差异(大多数数据库都可以优化这类事情),但如果您使用左连接,它们可以对结果产生影响。

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'

这两个查询不会返回与第一个查询相同的结果,通过将条件放在 where 子句而不是连接中,将左连接变为内连接。

于 2010-01-28T14:37:30.970 回答
0

那么你不能在 SQL Server 2008 R2 的 WHERE 子句中使用*=和OUTER JOIN 语法=*

我不想看到混合两种样式的查询

于 2010-01-28T19:39:08.840 回答