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

Jam*_*man 56 sql t-sql sql-server performance sql-server-2005

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

作为调查的一部分,为什么这可能是我想我会问这里的问题.

所以:

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

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

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

任何帮助将非常感激.

Qua*_*noi 55

一般来说,INNER JOIN并且EXISTS是不同的东西.

前者返回两个表中的重复项和列,后者返回一个记录,并且作为谓词,仅从一个表返回记录.

如果对UNIQUE列执行内部联接,则它们表现出相同的性能.

如果你在应用的记录集上进行内连接DISTINCT(去掉重复项),EXISTS通常会更快.

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

在我的博客中看到这篇文章:

  • @EricI:请你提供一个查询示例,如果输出相同,那么使用`DISTINCT`效率低于`GROUP BY`的查询效果如何?谢谢! (8认同)
  • 这有点偏离主题,但我建议避免使用DISTINCT并使用GROUP BY在返回不同列表时获得更好的整体性能.DISTINCT的表现一般不如GROUP BY.它可能有助于弥补INNER JOIN和EXISTS之间的一些差异. (2认同)

gbn*_*gbn 11

也许,也许不是.

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