in-list iterator

--针对目标sql的in后面是常量集合的首选项处理方法,其处理效率通常都会比in-list expansion高
--使用in-list iterator的时候,in所在列上一定要有索引
--可以通过联合设置10142和10157事件来禁掉in-list iterator,但是没有hint来强制使用in-list iterator

SQL> create table emp1 as select * from emp;
SQL> create index idx_emp1_dept on emp1(deptno);
SQL> select * from emp1 where deptno in (10,20,30);
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------
SQL_ID  df7dw3ph8g0t7, child number 0
-------------------------------------
select * from emp1 where deptno in (10,20,30)Plan hash value: 2544692611----------------------------------------------------------------------------------------------
| Id  | Operation                    | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |               |       |       |     2 (100)|          |
|   1 |  INLIST ITERATOR             |               |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| EMP1          |    14 |  1218 |     2   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | IDX_EMP1_DEPT |     1 |       |     1   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------

oracle中in和or是等价的:

SQL> select * from emp1 where deptno=10 or deptno=20 or deptno=30;
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------
SQL_ID  2yya3cuswm15m, child number 0
-------------------------------------
select * from emp1 where deptno=10 or deptno=20 or deptno=30Plan hash value: 2544692611----------------------------------------------------------------------------------------------
| Id  | Operation                    | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |               |       |       |     2 (100)|          |
|   1 |  INLIST ITERATOR             |               |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| EMP1          |    14 |  1218 |     2   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | IDX_EMP1_DEPT |     1 |       |     1   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------

  

删除索引后就会走全表扫描,用不到INLIST ITERATOR的:

SQL> drop index idx_emp1_dept;
SQL> select * from emp1 where deptno in (10,20,30);
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------
SQL_ID  df7dw3ph8g0t7, child number 0
-------------------------------------
select * from emp1 where deptno in (10,20,30)Plan hash value: 2226897347--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |       |       |     3 (100)|          |
|*  1 |  TABLE ACCESS FULL| EMP1 |    14 |  1218 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

  

使用in-list iterator优化示例:http://blog.csdn.net/zengxuewen2045/article/details/52017297

in-list iterator相关推荐

  1. 184_刘发顺_Java核心编程

    Java核心编程 Java 技术栈: Java基础 Java面向对象:Java 是一种面向对象的语言,它对对象中的类.对象.继承.封装.多态.接口.包等均有很好的支持.为了简单起见,Java 只支持类 ...

  2. 2021年大数据常用语言Scala(十九):基础语法学习 iterator迭代器

    目录 iterator迭代器 使用迭代器遍历集合 iterator迭代器 scala针对每一类集合都提供了一个迭代器(iterator)用来迭代访问集合 使用迭代器遍历集合 使用iterator方法可 ...

  3. Java Iterator 使用

    学而时习之,温故而知新. 迭代器是一种模式.详细可见其设计模式,可以使得序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的.只要拿到这个对象,使用迭代器就可以遍 ...

  4. Java技术——Iterator和Enumeration的不同

    0. Iterator和Enumeration的不同 (1)两者的函数接口不同 Enumeration只有2个函数接口,通过Enumeration我们只能读取集合的数据,而不能对数据进行修改. Ite ...

  5. Rocksdb iterator 的 Forward-scan 和 Reverse-scan 的性能差异

    前言 最近在读 MyRocks 存储引擎2020年的论文,因为这个存储引擎是在Rocksdb之上进行封装的,并且作为Facebook 内部MySQL的底层引擎,用来解决Innodb的空间利用率低下 和 ...

  6. Rocksdb Iterator实现:从DBIter 到 TwoLevelIter 的漫长链路

    文章目录 1. 迭代器简单介绍 2. 迭代器用户态相关接口 3. 迭代器内部架构 4. 迭代器的入口实现 4.1 DBIter 4.2 MergingIterator 4.3 Memtable系列It ...

  7. Rocksdb iterator和snapshot 接口

    Rocksdb提供迭代器来来访问整个db中的数据,就像STL中的迭代器功能一样,用来访问容器中的具体的数据. 访问形式以及访问接口有如下几种: 遍历所有的key-value //打开db,并初始化一个 ...

  8. STL模拟实现1.0 -- list和iterator模拟实现和简单分析

    引言 C ++ 标准模本库<STL>中有很多优秀的代码实现,不然怎么能叫做C++标准模板库呢,其中一个实现就是有一个容器,叫做list.所谓容器其实就是存储相同类型数据的一个存储集合,li ...

  9. ArrayList Iterator remove java.lang.UnsupportedOperationException

    在使用Arrays.asList()后调用add,remove这些method时出现 java.lang.UnsupportedOperationException异常.这是由于Arrays.asLi ...

  10. C++/C++11中头文件iterator的使用

    <iterator>是C++标准程序库中的一个头文件,定义了C++ STL标准中的一些迭代器模板类,这些类都是以std::iterator为基类派生出来的.迭代器提供对集合(容器)元素的操 ...

最新文章

  1. Spring注解标签详解@Autowired @Qualifier等
  2. 京东云擎提供了免费的wordpress一键安装功能了
  3. [转]Newtonsoft.Json高级用法
  4. 2. 抓ARP包, 抓PPPoE包
  5. 大企业中,Java面试官最爱问的问题集锦(2)
  6. 微信小程序检查版本更新并重启
  7. 微PE工具箱四合一下载并安装
  8. 四元数与欧拉角的转换与使用matlab的simulink搭建实现
  9. 台式机计算机无线开关在哪,电脑无线wifi开关在哪里打开
  10. 邮箱批量登陆工具测试版
  11. ICCV2021:Structure-Preserving Deraining with Residue Channel Prior Guidance
  12. android USB OTG功能实现
  13. yolov5 训练时报错踩坑(不定时更新)
  14. k8s部署kong+konga+pgs
  15. 机器人开发--pgv 视觉引导(Position Guided Vision)
  16. iconfont阿里巴巴矢量图标库本地下载的使用
  17. LCD、LED、OLED、ELED、CCFL之间的区别
  18. 5.Metasploit攻击载荷深入理解
  19. 数字电子时钟的设计与实现
  20. python数据分析-线性回归选择基金

热门文章

  1. notepad怎么设置python为环境变量_notepad
  2. mysql 性能分析_十大MySQL性能分析工具汇总!专治MySQL性能瓶颈
  3. 字符串匹配KMP算法设计C语言,KMP字符串匹配算法笔记
  4. oracle清空数据库命令行,使用命令行手动卸载Oracle Database 11gR2
  5. Echarts.js+jquery.js+china.js实现中国疫情地图
  6. [Ext JS]12.12.1 必填字段组件扩展
  7. Teamcenter(Enterprise 2007) 开发之- 快速搭建开发环境(windows)
  8. 服务器系统的安装方法,服务器的操作系统安装方法
  9. Crontab中文表达式解析
  10. 安装多个mysql及mysql服务