索引的几种扫描方式

1、索引唯一扫描

  是针对唯一索引的扫描,它仅仅适用于where条件里是 等值查询的目标sql。因为扫描的对象是唯一性索引,索引唯一性扫描的结果最多返回一条记录

 

2、索引范围扫描

  适用于所有类型的B树索引。

  当扫描对象是唯一性索引时,此时目标sql的where条件一定是范围查询(谓词条件为 between 、<、>);

  当扫描对象是非唯一性索引时,此时目标sql的where条件没有限制(可以是等值,也可以是范围查询)

 

3、索引全扫描

  适用于所有类型的B树索引。

  要扫描目标索引所有叶子快的所有索引行。索引全扫描需要扫描目标索引的所有叶子快。

  oracle在做索引全扫描时只需要访问必要的分支块等位到该索引最左边的叶子快的第一行索引行,就可以利用该索引叶子块之间的双向指针链表,从左至右一次扫描叶子块的所有索引行

 

4、索引快速全扫描

  只适合于CBO

  可以单块读可以多快读

  结果集不一定是有序的。因为FFS 时 oracle根据索引行在磁盘上的 物理存储位置 扫描,而不是根据索引行的逻辑顺序扫描。因此结果不一定有序 

 

5、索引跳跃式扫描

  仅仅适用于那些目标索引前导列的distinct值数量较少、后续非前导列的可选择性有非常好的情形。因为索引跳跃式扫描的执行效率一定会随着目标索引前导列的distinct值数量的递增而递减

 

posted @ 2017-05-10 22:11  Oracle-fans  阅读(3395)  评论(0编辑  收藏  举报