正如我们所知,所有人都说EXISTS
比IN
条款更好。我有问题,每次都没有回答。sql server中存在的执行情况
当我们使用Exists
时,在获取第一条记录时是完全执行内部查询还是继续执行所有记录?
正如我们所知,所有人都说EXISTS
比IN
条款更好。我有问题,每次都没有回答。sql server中存在的执行情况
当我们使用Exists
时,在获取第一条记录时是完全执行内部查询还是继续执行所有记录?
[NOT] EXISTS运算符在子查询(即驱动查询包含大量数据)时提供最佳性能。原因是它遵循查询中'至少找到'的原则。如果在与主驾驶查询相关的子查询中找到至少一条记录,并且停止进一步扫描该表,则将其设置为TRUE。与[NOT] IN,LIKE等其他比较运算符不同,它会返回用于比较的数据,[NOT] EXISTS返回BOOLEAN输出。
您可以在链接找到更详细的说明:
http://www.dbanotes.com/database-development/using-exists-in-oracle-sql-queries/
我会说,你的说辞是可怕的开始。你在文章中首先说的是一个谬论 - 吸引人气。这真的是专业人员处理自己的方式吗?
至于你的实际问题,exists
和in
都是一样的。任何理智的查询计划优化器都会为它们生成相同的计划。
-- http://sqlfiddle.com/#!6/97c87/1
select *
from t1
where name in (select name from t2)
此查询将产生计划:
-- http://sqlfiddle.com/#!6/97c87/2
select *
from t1
where exists (select name from t2 where t2.name=t1.name)
而这第二个查询会产生计划:
正如你所看到的,是相同的。
一个简单的谷歌搜索会给你答案:) @Dinesh –