sql 服务器中存在的执行

Execution of Exists in sql server

众所周知,EXISTS 优于 IN 子句。我有问题,但每次都没有回答。

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

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

您可以在 link 中找到更详细的插图:

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

existsin都是一样的。任何理智的查询计划优化器都会为它们生成相同的计划。

-- 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)

第二个查询将生成计划:

如您所见,两者完全相同。