3.对于组合索引来说如果where条件后媔出现了组合索引的引导列,那么可能执行index range scan
如果select 语句后面中的列都被包含在组合索引中,而且where后面没有出现组合索引的引导列并且需偠检索出大部分数据,那么这个时候可能执行index fast full scanindex fast full scan 发生的条件:
1.必须是组合索引。2.引导列不在where条件中
当查询可以通过组合索引得到结果而且返回结果很少,并且where条件中没有包含索引引导列的时候可能执行index skip scan
索引跳跃式扫描发生的条件:
2.引导列没有出现在where条件中
下面通过一个简单嘚实验验证一下上诉理论:
PL/SQL 过程已成功完成。
对于非唯一索引即使where后面的限制条件是=,但是有可能返回多行,所以进行index range scan
因为查询所需要的信息可以通过索引ooo获得并且where后面没有引导列owner,而且返回的行数很少(这里只有一行)所以CBO选择index skip scan,这里autotrace没有显示返回多少行,下面显示一下
因为查询所需的信息可以通过索引ooo获得并且where后面没有引导列owner,而且返回的行数较多(1701行),所以CBO选择index fast full scan,这样避免了全表扫描