INNER JOIN可以提供比EXISTS更好的性能

时间:2010-02-01 14:32:07

标签: sql sql-server sql-server-2005 performance tsql

我一直在研究在一系列程序上改进性能,最近一位同事提到他在使用INNER JOIN代替EXISTS时已经取得了显着的性能提升。

作为调查的一部分,为什么会这样,我想我会在这里问这个问题。

所以:

  • INNER JOIN能提供比EXISTS更好的性能吗?
  • 这会发生什么情况?
  • 我如何设置测试用例作为证据?
  • 您是否有进一步文档的有用链接?

实际上,人们可以对这个问题提出任何其他经验。

如果有任何答案可以在没有任何其他可能的性能改进建议的情况下专门解决这个问题,我将不胜感激。我们已经取得了相当程度的成功,我只对这一项感兴趣。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:52)

一般来说,INNER JOINEXISTS是不同的东西。

前者返回两个表中的重复项和列,后者返回一个记录,作为谓词,只返回一个表中的记录。

如果您在UNIQUE列上执行内部联接,则它们会表现出相同的效果。

如果您在应用DISTINCT的记录集上进行内部联接(以删除重复项),EXISTS通常会更快。

INEXISTS子句(具有等值相关性)通常使用几种SEMI JOIN算法中的一种,这些算​​法通常比其中一个表上的DISTINCT更有效

在我的博客中查看此文章:

答案 1 :(得分:9)

也许,也许不是。

  • 最有可能生成相同的计划
  • INNER JOIN可能需要DISTINCT才能获得相同的输出
  • EXISTS处理NULL