oracle中in与exist的用法与比较

最近在工作中用到oracle的in函数,但是该函数的参数个数存在上限(1000)的限制,而且涉及查询的两个表还在两个不同的数据库中,就无法使用exists函数来替代in的使用了。但还是总结一下in与exists的用法差异。

1.in适用于内表比外表数据量小的场景:select * from testA  a where a.client_id in (select * from testB)。

原因:in方法下,oracle会执行两个for循环遍历,外循环次数为testA的数据,内循环次数为testB的数据。如果testB的数据量超过testA,很明显执行效率会降低,只有testB的数据量小于testA时,才适合选择in方法;

2.exists适用于内表数据多于外表的场景:select * from testA a where exists (select * from testB b where a.client_id=b.client_id)。

原因:exists方法下,oracle会执行外表和内表的遍历查询,外循环次数为testA的数据,内循环次数也是testA的数据量大小。所以当内表数据量小于外表时,采用in,内表数据量大于外表时,采用exists,内表等于外表时,两者性能相当。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值