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表被锁定怎么办

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载