2015-07-13 74 views
-3

正如我们所知,所有人都说EXISTSIN条款更好。我有问题,每次都没有回答。sql server中存在的执行情况

当我们使用Exists时,在获取第一条记录时是完全执行内部查询还是继续执行所有记录?

+1

一个简单的谷歌搜索会给你答案:) @Dinesh –

回答

-1

[NOT] EXISTS运算符在子查询(即驱动查询包含大量数据)时提供最佳性能。原因是它遵循查询中'至少找到'的原则。如果在与主驾驶查询相关的子查询中找到至少一条记录,并且停止进一步扫描该表,则将其设置为TRUE。与[NOT] IN,LIKE等其他比较运算符不同,它会返回用于比较的数据,[NOT] EXISTS返回BOOLEAN输出。

您可以在链接找到更详细的说明:

http://www.dbanotes.com/database-development/using-exists-in-oracle-sql-queries/

+0

我不知道你从哪里得到你的信息,但我建议一个新的来源。 “in”,“like”和你所谓的“others”也是布尔运算符,一旦找到数据就会停下来。 – Blindy

+0

那么我提到上面的链接和下面的链接,如果多数民众赞成什么时候要求什么时候引用“源”:http://stackoverflow.com/questions/12896007/oracle-in-vs-exists-difference @Bindy –

+0

这里没有人提到甲骨文,但你,如果这是真的。 – Blindy

1

我会说,你的说辞是可怕的开始。你在文章中首先说的是一个谬论 - 吸引人气。这真的是专业人员处理自己的方式吗?

至于你的实际问题,existsin都是一样的。任何理智的查询计划优化器都会为它们生成相同的计划。

-- http://sqlfiddle.com/#!6/97c87/1 
select * 
from t1 
where name in (select name from t2) 

此查询将产生计划:

plan 1

-- http://sqlfiddle.com/#!6/97c87/2 
select * 
from t1 
where exists (select name from t2 where t2.name=t1.name) 

而这第二个查询会产生计划:

enter image description here

正如你所看到的,是相同的。

+0

如果您将运行此查询与更多的记录,那么你会得到不同。 – Dinesh

+0

你错了,计划不说谎。 – Blindy

相关问题