首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server IN与EXISTS性能

SQL Server IN与EXISTS性能
EN

Stack Overflow用户
提问于 2010-01-14 23:43:41
回答 4查看 151K关注 0票数 128

我很好奇下面哪一个会更有效率?

我在使用IN时总是有点谨慎,因为我相信SQL Server会把结果集变成一个大的IF语句。对于较大的结果集,这可能导致较差的性能。对于较小的结果集,我不确定哪一个更可取。对于较大的结果集,EXISTS不是更高效吗?

代码语言:javascript
复制
WHERE EXISTS (SELECT * FROM Base WHERE bx.BoxID = Base.BoxID AND [Rank] = 2)

代码语言:javascript
复制
WHERE bx.BoxID IN (SELECT BoxID FROM Base WHERE [Rank = 2])
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-14 23:53:05

EXISTS将更快,因为一旦引擎找到匹配,它将停止查找,因为该条件已被证明是真的。

使用IN,它将在进一步处理之前收集子查询的所有结果。

票数 154
EN

Stack Overflow用户

发布于 2010-08-12 00:08:58

我在SQL Server2005和2008上做了一些测试,在EXISTS和IN上都得到了完全相同的实际执行计划,正如其他人所说的那样。优化器是最优的。:)

但是需要注意的是,如果您的查询措辞不正确,EXISTS、IN和JOIN有时会返回不同的结果:http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx

票数 39
EN

Stack Overflow用户

发布于 2010-01-14 23:54:01

在这些情况下,执行计划通常是相同的,但除非您看到优化器是如何考虑索引等所有其他方面的因素,否则您将永远不会知道。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2065329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档