美文网首页
in与exists

in与exists

作者: LingHun | 来源:发表于2019-07-10 08:59 被阅读0次

以下内容转自:https://blog.csdn.net/e1256325535/article/details/75865270

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

相关文章

网友评论

      本文标题:in与exists

      本文链接:https://www.haomeiwen.com/subject/sefckctx.html