1

根据此链接:

MSDN 链接

它表示如果交叉连接具有 where 子句,则它表现为内连接并返回与内连接相同的结果。

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

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

我在 Web 上找不到与 SQL Server 相同的直接答案。

  • 吉里哈

  • 吉里哈

4

1 回答 1

2

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

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

于 2013-10-03T16:50:24.600 回答