我一直在研究在一系列程序上改进性能,最近一位同事提到他在使用INNER JOIN代替EXISTS时已经取得了显着的性能提升。
作为调查的一部分,为什么会这样,我想我会在这里问这个问题。
所以:
实际上,人们可以对这个问题提出任何其他经验。
如果有任何答案可以在没有任何其他可能的性能改进建议的情况下专门解决这个问题,我将不胜感激。我们已经取得了相当程度的成功,我只对这一项感兴趣。
非常感谢任何帮助。
答案 0 :(得分:52)
一般来说,INNER JOIN
和EXISTS
是不同的东西。
前者返回两个表中的重复项和列,后者返回一个记录,作为谓词,只返回一个表中的记录。
如果您在UNIQUE
列上执行内部联接,则它们会表现出相同的效果。
如果您在应用DISTINCT
的记录集上进行内部联接(以删除重复项),EXISTS
通常会更快。
IN
和EXISTS
子句(具有等值相关性)通常使用几种SEMI JOIN
算法中的一种,这些算法通常比其中一个表上的DISTINCT
更有效
在我的博客中查看此文章:
答案 1 :(得分:9)
也许,也许不是。