ORACLE 11G in exists的执行效率分析

简介: 前言:在以往的ORACLE SQL调优经验中,很多sql高手建议在系统中执行exists禁用in,很多新手也默认的接受了这个观点, 本文就是通过实验来对这个观点进行验证来进行验证;  准备工作:1、创建测试表在schemeas hr下...

前言:在以往的ORACLE SQL调优经验中,很多sql高手建议在系统中执行exists禁用in,很多新手也默认的接受了这个观点,

本文就是通过实验来对这个观点进行验证来进行验证;

 

准备工作:

1、创建测试表

在schemeas hr下面,创建表A1

脚本:create table A1  as select * from all_objects;

 

创建表B1

脚本:CREATE TABLE HR.B1 (  ID  NUMBER)

 

插入100条数据

脚本:

 begin

   for i in 1..100 loop                                                       

   insert into hr.wu values(i);

  if mod(i,100)=0 then

   commit;

   end if;

   end loop;

   end;

   /

 

2、in和exists原理及性能实验测试

in测试:

脚本:

select e.

from hr.a1 e

where e.object_id in 

(select d.id from hr.b1 d where d.id='100');

 

执行计划如下:

 

exists测试:

脚本:

select e.

from hr.a1 e

where   exists 

(select 1 from  hr.b1 d

where e.object_id=d.id and d.id='100');

 

执行计划如下:

 

结论一:以上两个执行计划中in和exists是一样的,两张表都做HASH JOIN SEMI,两个解析的hash values都是560281509。

 

 

3、 not in 和not exists 的性能测试

not in的测试

脚本:

select e.

from hr.a1 e

where e.object_id not in 

(select d.id from hr.b1 d where d.id='100');

 

执行计划

 

 

not exists的测试

脚本:

select e.

from hr.a1 e

where  not exists 

(select 1 from  hr.b1 d

where e.object_id=d.id and d.id='100');

 

执行计划

 

结论二:以上两个执行计划中in和exists是一样的,两张表都做HASH JOIN SEMI,两个解析的hash values都是2184141079。

 

疑问:既然数据库存在in和exists的语法,从技术管理的角度上面来说,既然存在不一样,那么肯定是有存在的原因;

本文中测试的过程中A1表从3千的数据增加到3百万,表B1的数据从10条增加到3百万条,整个的执行计划都没有改变;

 

---------------------------------------------------------------------------------------------------------------

               博客编写:吴志强                                                                                  ORACLE 技术交流群:367875324

---------------------------------------------------------------------------------------------------------------

相关文章
|
10月前
|
Oracle 关系型数据库 数据库
使用docker安装配置oracle 11g
使用docker安装配置oracle 11g
|
6月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
1172 2
|
Oracle 关系型数据库 数据库
Oracle-Top-N分析
Oracle-Top-N分析
87 0
|
10月前
|
SQL Oracle 前端开发
Oracle效率分析,Github标星25K+超火的前端实战项目
Oracle效率分析,Github标星25K+超火的前端实战项目
|
9月前
|
Oracle 关系型数据库 数据库
Oracle 11G数据库安装步骤及截图操作2
Oracle 11G数据库安装步骤及截图操作
90 0
|
9月前
|
Oracle 安全 关系型数据库
Oracle 11G数据库安装步骤及截图操作1
Oracle 11G数据库安装步骤及截图操作
135 0
|
10月前
|
存储 Oracle 关系型数据库
手把手教你安装Oracle——以oracle 11g为例
手把手教你安装Oracle——以oracle 11g为例
|
10月前
|
Oracle 关系型数据库
oracle基本笔记整理及案例分析2
oracle基本笔记整理及案例分析2
|
10月前
|
Oracle 关系型数据库
oracle基本笔记整理及案例分析1
oracle基本笔记整理及案例分析1
|
10月前
|
SQL Oracle 关系型数据库
docker 方式安装ORACLE 11g
docker 方式安装ORACLE 11g
694 5

热门文章

最新文章

推荐镜像

更多