理解oracle索引扫描类型的特点以及具体触发的条件,对于通过合理地使用索引,进行sql优化至关重要(例如组合索引的引导列的选择问题)

在总结索引扫描类型前,需要再次强调关于索引特点的几个关键点:

  • 对于单一列建立的索引,既单一列索引,b-tree中不保存索引列的null值信息
  • 对于多个列建立的索引,既组合列索引,b-tree中会连同其他非null值列,保留该列null值记录;对于一条记录中,组合索引全部列都是null值,组合索引中不会记录(从之前的实验看,此时的执行计划是全表扫描)
  • 创建主键约束以及唯一键约束,或自动创建唯一索引
  • create index创建的索引属于普通索引(非唯一索引)
  • create unique index创建的索引属于唯一索引

其他的一些特点,可参阅前面的几篇总结。

此外,为避免概念的混淆,再次说明一下:“索引类型”主要探讨的是索引的几种类别的问题,而“索引扫描类型”主要探讨的是索引扫描的几种具体实现方法的问题。

 

 

1、索引扫描类型概述

Oracle提供了五种索引扫描类型,根据具体索引类型、数据分布、约束条件以及where限制的不同进行选择: 

  • 索引唯一扫描(index unique scan)
  • 索引范围扫描(index range scan)
  • 索引跳跃扫描(index skip scan)
  • 索引全扫描(index full scan)
  • 索引快速扫描(index fast full scan)

 

 

2、索引唯一扫描(index unique scan) 

索引唯一扫描,仅仅针对唯一索引的扫描,且仅适