索引的扫描识别

1.全表扫描:hint为full ( tablename )

在数据查询过程中,对整张表全部低于高水位线标记的数据块进行读取。

2.ROWID扫描:该扫描方式为索引扫描方式的第二个动作,是查询速度最快的扫描方式。

3.索引唯一扫描:hint为index (tablename index_name)

从索引的根节点到分支节点再到叶子节点上只存储着一个对应的ROWID,即对应的返回结果也只返回一行的扫描方式。该扫描方式只对唯一键索引上的等值查询有效。

4.索引范围扫描:hint为index_rs(tablename index_name)

在对唯一索引列使用了范围操作符(>、<、<>、>=、<=或between等)或者对非唯一索引列进行查询时,采用索引范围扫描。

5.索引全扫描:hint为index_fs(tablename index_name)

表和表进行排序合并联立查询时,且排序的列在索引中;查询中有ORDER BY 或者group by子句,且子句中所有的列在索引中时。执行索引全扫描。索引全扫描过程是单块读取,不支持多块的并行读取。

6.索引快速扫描:hint为index_ffs(tablename index_name)

和索引全扫描类似,但是不对查询出的数据进行排序;并且可以使用多块读功能,也可以使用并行读,从而获得最大吞吐量。

扫描方式

输出排序

取数效率

索引全扫描

有序输出,无序额外排序

单块读,不支持并行

索引快速扫描

无序输出,需要额外排序

支持并行多块读

7.索引跳跃扫描:hint为index_ss (tablename index_name)

该扫描发生在复合索引上,如果SQL语句中的WHERE中只包含了索引的部分列,并且这些列不是第一列,则有可能发生索引跳跃扫描。在查询时,如果第一列没有被指定,则跳过它。

索引跳跃扫描的原理为:Oracle会对复合索引进行划分,分为多个子索引。并且子索引的数量和复合索引第一列的distinct值的数量一致。这样每次查询时,都会对一个子索引进行扫描。

注意:索引跳跃扫描需要CBO,并且对目标表进行过分析。更重要的一点为需要复合索引的第一列的distinct数量少。

8.索引组合扫描:hint为index_combine(tablename index_name)

如果where子句中包含两个筛选条件,且每个筛选条件都有单独的索引,则将使用索引组合扫描。

9.索引联立扫描:hint为index_join(tablename index_name1 index_name2)

如果SQL语句返回的结果集包含的列均在索引中,则不需要回表,直接通过两个索引的hash join就可以了。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29725229/viewspace-1406173/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29725229/viewspace-1406173/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值