Oracle中in和exists的区别介绍
来源:爱站网时间:2020-01-01编辑:网友分享
大家一直都以为exists比in速度快,但其实这种感觉是不准的,对于Oracle中in和exists的区别也有很多小伙伴们都不是非常清楚,下面我们就个爱站小编一起去看看Oracle中in和exists的区别介绍。
大家一直都以为exists比in速度快,但其实这种感觉是不准的,对于Oracle中in和exists的区别也有很多小伙伴们都不是非常清楚,下面我们就个爱站小编一起去看看Oracle中in和exists的区别介绍。
in其实是将外表和内表进行hash join,exists是先对外表进行loop操作,然后每次loop后再对内表进行查询。
如果两张表大小差不多,那么exists和in的效率差不多。
例如: 一张大表为A,一张小表B
一、第一种情况
select * from A where mm in (select mm from B)
效率高,这里用到的是大表A上的索引
select * from B exists (select mm from A where mm=B.mm)
效率高,这里用到的是小表B上的索引
二、第二种情况
select * from B where mm in (select mm from A)
效率低,这里用到的是小表B上的索引
select * from A exists (select mm from B where mm=A.mm)
效率高,这里用到的是大表A上的索引
三、第三种情况
not exists 在使用时依然会用到表上的索引,但是not in会进行全盘扫描
因此,not exists 始终比not in 的效率高
四、第四种情况
in与==效果是相同的
以上所述是小编给大家分享Oracle中in和exists的区别介绍,文章只是涉及到了Oracle的一部分知识,如果想深入研究的话这些是不够的,还是需要我们自
己去搜集一些相关的知识
上一篇:Oracle表空间不足怎么办
下一篇:oracle表被锁定怎么办