加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle中in与exist的用法与比较

发布时间:2020-12-12 14:40:28 所属栏目:百科 来源:网络整理
导读:最近在工作中用到oracle的in函数,但是该函数的参数个数存在上限(1000)的限制,而且涉及查询的两个表还在两个不同的数据库中,就无法使用exists函数来替代in的使用了。但还是总结一下in与exists的用法差异。 1.in适用于内表比外表数据量小的场景:select * f

最近在工作中用到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,内表等于外表时,两者性能相当。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读