首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IN、EXISTS和ANY/SOME的用法

问IN、EXISTS和ANY/SOME的用法
EN

Stack Overflow用户
提问于 2013-07-10 02:51:59
回答 2查看 163关注 0票数 1

我正在尝试优化一些存储过程,它们非常频繁地使用EXISTS、ANY或IN,我想知道哪种情况下IN、Exists或ANY是最好的。

我使用IN、EXISTS和ANY创建了三个查询,并检查了它们的执行周期,但这三个查询的执行周期是相同的。我搞不懂为什么它是一样的,执行周期怎么可能不同,或者它可以不同的场景是什么。下面是我尝试过的三个查询和执行周期。谁能给我一个例子,如何改变执行周期,请分享任何场景或查询。

使用EXISTS查询

子查询中还有一个问题,指定*或列的需要是什么?

代码语言:javascript
复制
SELECT * FROM RecastEvents AS re
    WHERE EXISTS (Select * FROM Metadata 
                      WHERE EventId = 2145984 AND EventId = re.CCId)

​

​

使用IN查询

代码语言:javascript
复制
SELECT * FROM RecastEvents as re
    WHERE re.CCID IN (SELECT EventId FROM Metadata
                          WHERE EventId = 2145984)

​

​

使用ANY查询

代码语言:javascript
复制
SELECT * FROM RecastEvents AS re
    WHERE re.CCID = ANY (SELECT EventId FROM Metadata 
                             WHERE EventId = 2145984)

​

​

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-10 02:55:39

它的结果是一样的,因为查询优化器正在做它的工作。

SQL (和类似的语言)的目的之一是编写一个查询,指定您想要什么,而不是如何想要它,并让查询系统处理如何。

在这种情况下,查询优化器规则以相同的实际查询执行计划结束。这可能会改变,也可能不会改变,这取决于以后的数据量。我猜它不会。

至于第一个中的数据,您可以尝试使用1,它会工作得很好,在本例中它被用作“*”的占位符。

票数 3
EN

Stack Overflow用户

发布于 2013-07-10 03:52:14

在sql server 2005和更早的版本中,EXISTS会更快,因为一旦它找到了自己的记录,它就会退出进程。而IN将从子查询中收集所有数据进行处理。

但是,在sql server的最新版本中,查询优化器足够智能,可以生成通常更好的计划。

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

https://stackoverflow.com/questions/17555962

复制
相关文章

相似问题

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