【Oracle优化笔记】访问索引的方法
来源:互联网 发布:个人短信群发平台知乎 编辑:程序博客网 时间:2024/06/04 20:07
索引唯一性扫描(INDEX UNIQUE SCAN)(针对unique index的扫描)比索引范围扫描(INDEX UNIQUE SCAN)需要的逻辑读至少少1,这是因为索引唯一行扫描明确只有最多一行数据返回,而索引范围扫描则可能有多行数据返回,得到第一行数据之后还会向下至少再扫一个叶子节点。
索引全扫描(INDEX FULL SCAN):索引全扫描不需要扫描该索引的所有分支块,oracle在做索引全扫描的时候只需要访问必要的分支块的定位到位于该索引最左边的叶子块的第一行索引行,通过叶子块之间的双向指针链表就可以互相访问了。因为是按照从左至右进行扫描的,所以索引全扫描得到的数据是排好序的。索引全扫描一般都是不回表的,例如select count(*) from table; select empno from emp;能做索引全扫描的一个条件就是目标索引至少有一个索引键值列的属性是not null。
索引快速全扫描(INDEX FAST FULL SCAN):和索引全扫描差不多,一般也是不回表的,但也有很多区别。
和索引全扫描的区别是:
索引快速全扫描只有在CBO中能用
索引全扫描不能并行执行,而索引快速全扫描既可以使用多块读也可以使用并行执行。
索引快速全扫描的结果并不一定是有序的。因为索引快速全扫描时Oracle是根据索引行在磁盘上的物理存储位置来扫描的,而不是根据索引行的逻辑顺序扫描的。
索引跳跃式扫描(INDEX SKIP SCAN):适合所有类型的复合B树索引,(包括唯一性索引和非唯一性索引),它使得那些在where条件中没有针对目标索引的前导列指定查询条件同时又对该索引的非前导列制定了查询条件的目标SQL依然能够使用该索引。
例如索引建在(gender,eno)两列,where条件中没有gender条件只有例如emp=100这种查询条件依然可以使用该复合B树索引。
之所以能用是因为oracle帮我们对sql语句进行了改写,将前导列加了进来。
原语句:
select * from test where eno=100;
如果此时gender列只有两个取值F和M,oracle会帮我们把它改写成
select * form test where gender='F' and eno=100
union all
select * from test where gender='M' and eno=100;
从此可以看出oracle中的索引跳跃式扫描只适用于那些目标索引前导列的distinct值数量较少,后续非前导列的可选择性又非常好的情形,因为索引跳跃式扫描的执行效率一定会随着目标索引前导列的distinct值数量的递增而递减。
- 【Oracle优化笔记】访问索引的方法
- 《基于ORACLE SQL优化》读书笔记-访问索引的方法
- oracle 索引访问的几种方法
- Oracle中访问表和索引的方法
- ORACLE数据库SQL优化--->ORACLE访问数据的方法
- Oracle CBO优化模式中的5种索引访问方法浅析
- Oracle CBO优化模式中的5种索引访问方法浅析
- 【SqlServer2005+ 性能优化之索引优化】介绍索引访问方法及索引优化
- oracle优化关于索引的
- Oracle数据库的优化--索引
- mongodb索引优化的方法
- 建索引优化的优化方法
- Oracle索引的维护方法
- oracle索引的维护方法
- Oracle性能优化5-索引的不足
- 关于oracle索引的性能优化
- 优化SQL语句的若干方法 /Oracle学习笔记
- Oracle 索引访问方式
- 网络安装centos
- 高效整洁CSS代码原则
- VMware虚拟机 ping出现 DUP!
- 闹钟管理器AlarmManager(整理)
- MD5 校验两个文件是否一样
- 【Oracle优化笔记】访问索引的方法
- android 全屏,无标题栏
- imo电子白板共享时无法插入文档的解决办法
- UIActivityIndicatorView活动指示器
- CodeForces 214E - Relay Race(二取方格数)
- Unix chroot最佳实践
- HOG特征与opencv类实现
- loadrunner 关联方法 详细
- JSP中文乱码处理之Servlet接收参数中文乱码处理