IT技术博客大学习 共学习 共进步

oracle索引扫描

Marvelyu's Notes(余广宏的个人技术博客) 2012-05-04 00:09:51 浏览 2,903 次

    索引扫描不同于表扫描,表扫描只有一种类型就是全表扫描(full table scans),而索引扫描根据具体情况不同可以分为如下几类:

    索引唯一扫描(index unique scan).这种扫描发生在主键或者唯一索引上,根据键值可以唯一确定要访问的记录,这种扫描方式因为返回的记录数少,能够快速定位记录,扫描效率较高

    索引范围扫描(index range scan).这种撒么一般发生在返回多个值的时候,如where条件中>and <或者非唯一索引中的=时,范围扫描要求返回的结果集不能太多,否则不能从索引扫描上获取益处,因为从索引只能获得rowid与索引列的值,,有可能还需要根据rowid回表一条条的去找行的其他数据,除非不需要回表便能从索引上获得必需的数据。

    使用index rang scan的3种情况:

    (a) 在唯一索引列上使用了range操作符(> < <> >= <= between)。

     (b) 在组合索引上,只使用部分列进行查询,导致查询出多行。

     (c) 对非唯一索引列上进行的任何查询。

    索引全扫描(index full scan)这种方式中,ORACLE会按照索引值的顺序全部扫描该索引,类似全表扫描,效率不高。CBO根据统计数据得知进行全索引扫描比进行全表扫描更有效时,才能进行全索引扫描,而且此时查询出的数据都必须可以从索引中直接得到。

    索引快速扫描(index fast full scan).与索引全扫描不同,不按照索引值的顺序来访问,而是直接读取索引块来访问索引数据。这种存取方法中,可以使用多块读功能。也可以直接使用并行读方法以便于获得最大吞吐量与缩短执行时间。

    索引跳跃式扫描(index skip scan) .复合索引中第一个字段类型少,而第二个字段唯一,当条件中用到第二个字段时,将跳过第一个字段。

    实际OLTP系统中只有索引唯一扫描和索引范围扫描。

建议继续学习

  1. 由浅入深探究mysql索引结构原理、性能分析与优化 (阅读 16,124)
  2. 浅谈MySQL索引背后的数据结构及算法 (阅读 11,384)
  3. 由浅入深理解索引的实现(2) (阅读 7,524)
  4. HBase二级索引与Join (阅读 6,862)
  5. 如何建立合适的索引? (阅读 6,666)
  6. mysql查询中利用索引的机制 (阅读 6,584)
  7. InnODB和MyISAM索引统计集合 (阅读 6,084)
  8. Innodb 表和索引结构 (阅读 6,041)
  9. MySQL索引背后的数据结构及算法原理 (阅读 5,622)
  10. mysql索引浅析 (阅读 5,185)