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=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 |
----------------------------------------------------------------------------------------------
删除索引后就会走全表扫描,用不到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的更多相关文章
- 设计模式(十):从电影院中认识"迭代器模式"(Iterator Pattern)
		上篇博客我们从醋溜土豆丝与清炒苦瓜中认识了“模板方法模式”,那么在今天这篇博客中我们要从电影院中来认识"迭代器模式"(Iterator Pattern).“迭代器模式”顾名思义就是 ... 
- 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。
		最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ... 
- [LeetCode] Flatten Nested List Iterator 压平嵌套链表迭代器
		Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ... 
- [LeetCode] Peeking Iterator 顶端迭代器
		Given an Iterator class interface with methods: next() and hasNext(), design and implement a Peeking ... 
- [LeetCode] Zigzag Iterator 之字形迭代器
		Given two 1d vectors, implement an iterator to return their elements alternately. For example, given ... 
- [LeetCode] Binary Search Tree Iterator 二叉搜索树迭代器
		Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ... 
- 用vue.js学习es6(六):Iterator和for...of循环
		一.Iterator (遍历器)的概念: 遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只 要部署Iterator接口,就可以完成遍历操 ... 
- [转]使用Enumeration和Iterator遍历集合类
		原文地址:http://www.cnblogs.com/xwdreamer/archive/2012/05/30/2526268.html 前言 在数据库连接池分析的代码实例中,看到其中使用Enume ... 
- 14 Iterator和for...of循环
		Iterator和for...of循环 首先 Iterator 是一个接口. 标准是 function makeIterator(array) { var nextIndex = 0; return ... 
- JAVA中ListIterator和Iterator详解与辨析
		在使用Java集 合的时候,都需要使用Iterator.但是java集合中还有一个迭代器ListIterator,在使用List.ArrayList. LinkedList和Vector的时候可以使用 ... 
随机推荐
- Android -- 打开某个指定的网站
			1. 要使用的代码 Intent intent = new Intent(); intent.setData(Uri.parse(sUrl)); intent.setAction(Intent.ACT ... 
- 构建json数据post到接口的若干条规则
			接受数据接口: public ActionResult PostDownloadLog(PostDownloadLog postDownloadLogs) PostDownLoadLogL类 publ ... 
- tomcat、Linux服务器
			tomcat.Linux服务器 用到的命令 解压命令: tar -zxvf 文件名 配置 : vi /etc/profile 按 i 进入 ... 
- JAVA操作MongoDB数据库
			1. 首先,下载MongoDB对Java支持的驱动包 驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads 2.Java操作Mo ... 
- Centos 6.5 挂载硬盘 4K对齐 (笔记 实测)
			环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Linux centos 2.6.32-431.17.1.el6.x86_64(Centos-6.5-x86_ ... 
- Odoo Many2many 指定默认分组过滤
			在odoo里如果想单击某个菜单打开的页面是自带过滤的,可以在打开菜单的动作中添加默认过滤来实现,今天有同学在群里问,如何在Many2many的添加更多的弹出窗口中添加类似的过滤,其实是非常非常简单的, ... 
- getElementsByClassName的兼容性
			/*----------------------------index.html------------------------------------*/ <!DOCTYPE html> ... 
- jq最新前三篇文章高亮显示
			/*---------最新前三篇文章高亮显示-------------*/ function latest(){ var color_arr=new Array( "blue", ... 
- Python2.x和3.x主要差异总结
			本文部分转载自http://my.oschina.net/chihz/blog/123437,部分来自自身修改 开始使用Python之后就到处宣扬Python如何如何好,宣传工作的一大重要诀窍就是做对 ... 
- ThinkPHP 3.2.3 简单后台模块开发(一)常用配置
			一.项目分组 下载解压 ThinkPHP 3.2.3,在默认的应用 Application(./Application) 中,包含一个默认的模块 Home(./Application/Home). 需 ... 
