in-list iterator
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相关推荐
- 184_刘发顺_Java核心编程
Java核心编程 Java 技术栈: Java基础 Java面向对象:Java 是一种面向对象的语言,它对对象中的类.对象.继承.封装.多态.接口.包等均有很好的支持.为了简单起见,Java 只支持类 ...
- 2021年大数据常用语言Scala(十九):基础语法学习 iterator迭代器
目录 iterator迭代器 使用迭代器遍历集合 iterator迭代器 scala针对每一类集合都提供了一个迭代器(iterator)用来迭代访问集合 使用迭代器遍历集合 使用iterator方法可 ...
- Java Iterator 使用
学而时习之,温故而知新. 迭代器是一种模式.详细可见其设计模式,可以使得序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的.只要拿到这个对象,使用迭代器就可以遍 ...
- Java技术——Iterator和Enumeration的不同
0. Iterator和Enumeration的不同 (1)两者的函数接口不同 Enumeration只有2个函数接口,通过Enumeration我们只能读取集合的数据,而不能对数据进行修改. Ite ...
- Rocksdb iterator 的 Forward-scan 和 Reverse-scan 的性能差异
前言 最近在读 MyRocks 存储引擎2020年的论文,因为这个存储引擎是在Rocksdb之上进行封装的,并且作为Facebook 内部MySQL的底层引擎,用来解决Innodb的空间利用率低下 和 ...
- Rocksdb Iterator实现:从DBIter 到 TwoLevelIter 的漫长链路
文章目录 1. 迭代器简单介绍 2. 迭代器用户态相关接口 3. 迭代器内部架构 4. 迭代器的入口实现 4.1 DBIter 4.2 MergingIterator 4.3 Memtable系列It ...
- Rocksdb iterator和snapshot 接口
Rocksdb提供迭代器来来访问整个db中的数据,就像STL中的迭代器功能一样,用来访问容器中的具体的数据. 访问形式以及访问接口有如下几种: 遍历所有的key-value //打开db,并初始化一个 ...
- STL模拟实现1.0 -- list和iterator模拟实现和简单分析
引言 C ++ 标准模本库<STL>中有很多优秀的代码实现,不然怎么能叫做C++标准模板库呢,其中一个实现就是有一个容器,叫做list.所谓容器其实就是存储相同类型数据的一个存储集合,li ...
- ArrayList Iterator remove java.lang.UnsupportedOperationException
在使用Arrays.asList()后调用add,remove这些method时出现 java.lang.UnsupportedOperationException异常.这是由于Arrays.asLi ...
- C++/C++11中头文件iterator的使用
<iterator>是C++标准程序库中的一个头文件,定义了C++ STL标准中的一些迭代器模板类,这些类都是以std::iterator为基类派生出来的.迭代器提供对集合(容器)元素的操 ...
最新文章
- Spring注解标签详解@Autowired @Qualifier等
- 京东云擎提供了免费的wordpress一键安装功能了
- [转]Newtonsoft.Json高级用法
- 2. 抓ARP包, 抓PPPoE包
- 大企业中,Java面试官最爱问的问题集锦(2)
- 微信小程序检查版本更新并重启
- 微PE工具箱四合一下载并安装
- 四元数与欧拉角的转换与使用matlab的simulink搭建实现
- 台式机计算机无线开关在哪,电脑无线wifi开关在哪里打开
- 邮箱批量登陆工具测试版
- ICCV2021:Structure-Preserving Deraining with Residue Channel Prior Guidance
- android USB OTG功能实现
- yolov5 训练时报错踩坑(不定时更新)
- k8s部署kong+konga+pgs
- 机器人开发--pgv 视觉引导(Position Guided Vision)
- iconfont阿里巴巴矢量图标库本地下载的使用
- LCD、LED、OLED、ELED、CCFL之间的区别
- 5.Metasploit攻击载荷深入理解
- 数字电子时钟的设计与实现
- python数据分析-线性回归选择基金
热门文章
- notepad怎么设置python为环境变量_notepad
- mysql 性能分析_十大MySQL性能分析工具汇总!专治MySQL性能瓶颈
- 字符串匹配KMP算法设计C语言,KMP字符串匹配算法笔记
- oracle清空数据库命令行,使用命令行手动卸载Oracle Database 11gR2
- Echarts.js+jquery.js+china.js实现中国疫情地图
- [Ext JS]12.12.1 必填字段组件扩展
- Teamcenter(Enterprise 2007) 开发之- 快速搭建开发环境(windows)
- 服务器系统的安装方法,服务器的操作系统安装方法
- Crontab中文表达式解析
- 安装多个mysql及mysql服务