ITPub博客

首页 > 数据库 > Oracle > 索引的扫描识别

索引的扫描识别

原创 Oracle 作者:winston17 时间:2015-01-18 21:20:33 0 删除 编辑

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博客 ” ,链接:https://blog.itpub.net/29725229/viewspace-1406173/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Oracle只读表空间
请登录后发表评论 登录
全部评论

注册时间:2014-06-25

  • 博文量
    15
  • 访问量
    23150