【问题标题】:SQL Server 2008 R2 : Cross join with Where Vs Inner Join PerformanceSQL Server 2008 R2:交叉联接与 Where 与内部联接性能
【发布时间】:2013-10-10 10:52:48
【问题描述】:

根据这个链接:

MSDN link

它表示如果交叉连接有 where 子句,它的行为类似于内连接,并返回与内连接相同的结果。

我理解那部分。但我的问题是,当我使用带有 where 条件的查询交叉联接和带有 ON 子句的内部联接的另一个查询时,都使用相同的关系并返回相同的数据,性能会有什么不同吗?

如果第三张/第四张表在 INNER 或 LEFT OUTER JOIN 上与这两个表连接,会不会影响性能?

我在网上找不到针对 SQL Server 的直接答案。

  • 吉里哈

  • 吉里哈

【问题讨论】:

  • 带 where 条件的交叉连接不一定是内连接,它取决于 where 条件。
  • 尝试两者并比较执行计划。

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


【解决方案1】:

如果您正在谈论交叉连接,其中条件作为 cpmarision 中的隐式连接到显式连接,它们通常具有相同的执行计划。然而,随着查询变得更加复杂,这可能会发生变化(很难预测引擎将如何选择执行复杂的查询),但除非它变得非常复杂,否则可能不会。您可以随时检查执行计划以查看是否发生这种情况。

在任何情况下你都不应该使用隐式连接,它们是一种 sql 反模式有几个原因,首先是它们很容易创建一个意外的交叉连接,而这对性能的影响很大并且经常导致不正确的查询结果或添加 DIstinct 的要求,这也很昂贵。此外,您不应该混合使用隐式连接和显式连接(您可能会得到错误的结果),如果您稍后必须转到左连接,则需要重新编写整个查询。所以隐式连接更难维护。最后,如果您需要一个真正的交叉连接,从隐式同步中看不出您是打算交叉连接还是意外连接。这可能会使 amintenance 变得特别困难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2012-07-19
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多