SQL查询联接性能

SQL查询联接性能,sql,performance,join,where,Sql,Performance,Join,Where,我想知道什么性能更好: 将条件放入联接中?(x在x.hi上连接y=y.hi和……)或者将其置于WHERE下,并仅在交叉条件下保留连接 感谢各位这将取决于查询优化引擎以及它如何将查询分解为其逻辑查询运算符 使用MS SQL Server,您可以查看执行计划,但通常没有区别,因为优化人员会认为这两种方法是等效的。在StackOverflow上也有类似的问题 这在很大程度上只是你喜欢哪种语法的问题。我的理解是,SQL优化器应该能够在性能差异不大的情况下对它们进行评估。我认为两者都不应该对性能产生影响(

我想知道什么性能更好: 将条件放入联接中?(x在x.hi上连接y=y.hi和……)或者将其置于WHERE下,并仅在交叉条件下保留连接


感谢各位

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


使用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'
这两个查询返回的结果与第一个查询不同,通过将条件放在where子句而不是join中,将左侧联接转换为内部联接。

在SQL Server 2008 R2的where子句中使用
*=
=*
外部联接语法


我不喜欢看到一个混合了两种风格的查询

完全重复:以及关于
100
的其他问题。对于某些数据库来说,这确实会造成性能差异。不幸的是,他没有说他在使用什么。你们都有很好的观点…我的答案来自于对Oracle和SQL Server的接触我的意思是假设结果是相同的,哪一个更快?见鬼,即使在SQL Server 2000中,你也不应该使用它们,因为它们有时会被误解为交叉连接。@HLGEM:我们当然知道,但是现在我们有一个很好的理由来证明为什么我们说“不”不正确的结果不足以作为一个理由?当然在这里。