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

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

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值