SQL Server 2008 R2:与Where Vs内部联接性能交叉连接

时间:2013-10-03 16:24:25

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

根据此链接:

MSDN link

它表示如果一个Cross join有where子句,它表现为一个Inner join,并返回与Inner join相同的结果。

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

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

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

  • 吉里贾

  • 吉里贾

1 个答案:

答案 0 :(得分:2)

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

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