oracle函数之exists和not exists用法详解

一、exists和in的效率问题:

1.select * from T1 where exists(select 1 from T2 where T1.A=T2.A);

2.select * from T1 where T1.A IN(select T2.A from T2);

T1数据量<<T2时,1的查询效率高;

T1数据量>>T2时,2的查询效率高;

 

用法:

exists(xxx)  就是判断括号中的语句能不能查找出记录,它要查找的记录是否存在;

通过使用exists,oracle会首先检查主键查询,然后运行子查询,知道它找到第一个匹配项,这就节省了时间。

oracle在执行IN子查询时,先执行子查询,并将获得的结果列放到一个临时表中(自动加索引)。在执行子查询前,系统先将主查询挂起,待子查询执行完毕,存放到临时表后再执行主查询。

 

exists和in使用场景:

a.能不用子查询尽量不要写子查询,而是直接编写多表连接操作。

b.in和exists的技术原理:

   in :先进行子查询,再进行主查询

   exists:先进行主查询,再到子查询中过滤

c.in和exists的使用建议:

   如果限制性特别强的条件在子查询,使用in

   如果限制性特别强的条件在主查询,使用exists

  采用优化匹配原则:拿最小记录匹配大记录。限制性强,则结果集小;

 

 

 

你可能感兴趣的:(not exists)