进行多个连接时是否需要连续关系

时间:2012-04-26 16:48:34

标签: sql sql-server sql-server-2008 sql-server-2005

这两个陈述/示例之间的结果或性能差异是否存在差异:

示例1(连续的INNER关系)

    SELECT ID FROM TABLE T
    INNER JOIN TABLE2 T2 ON T.ID = T2.ID
    INNER JOIN TABLE3 T3 ON T2.ID = T3.ID

示例2(非连续的INNER关系)

    SELECT ID FROM TABLE T
    INNER JOIN TABLE2 T2 ON T.ID = T2.ID
    INNER JOIN TABLE3 T3 ON T.ID = T3.ID

或这两个陈述/例子之间:

示例1(连续左关系)

    SELECT ID FROM TABLE T
    INNER JOIN TABLE2 T2 ON T.ID = T2.ID
    LEFT JOIN TABLE3 T3 ON T2.ID = T3.ID

示例2(非连续左关系)

    SELECT ID FROM TABLE T
    INNER JOIN TABLE2 T2 ON T.ID = T2.ID
    LEFT JOIN TABLE3 T3 ON T.ID = T3.ID

唯一的区别是第二个Join位于Table,而第一个示例位于Table2。我很确定他们会回复同样的事情,但我只是想在这里寻找更有经验的答案。感谢。

1 个答案:

答案 0 :(得分:3)

结果没有区别。这些陈述在功能上是等同的。

性能差异取决于特定的数据库和版本以及数据。

我的经验是,在这种简单的情况下,两个查询之间的性能通常没有差异。 SQL2008优化器将根据统计信息(表的大小,索引的可用性)以任何有意义的顺序运行连接,无论您以何种方式编写此查询。