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/ ,如需转载,请注明出处,否则将追究法律责任。