关于INDEX FULL SCAN和INDEX FAST FULL
SCAN的区别在于,前者在对索引进行扫描的时候会考虑大索引的结构,而且会按照索引的排序,
而后者则不会,INDEX FAST FULL
SCAN不会去扫描根块和分支块,对索引像访问堆表一样访问,所以这两个扫描方式用在不同的场合
如果存在ORDER BY这样的排序,INDEX FULL SCAN是合适的,如果不需要排序,那INDEX FAST FULL
SCAN效率是更高的。
http://blog.itpub.net/7728585/viewspace-627061/
一、何时INDEX FULL SCAN 或 INDEX
FAST FULL SCAN
1、select 与where子句中出现的所有列必须存在索引
2、查询返回的数据行总数占据整个索引10%以上的比率。取决于db_file_multiblock_read_count值与并行度的值
3、满足像统计行数这样的一些特定的标准,如count(*)这样的操作。count(*)操作几乎总是使用INDEX FAST FULL
SCAN
4、对于索引列上order by之类的操作几乎总是使用INDEX FULL SCAN
注:
参数db_file_multiblock_read_count会在index fast full scan 像full table
scan一样生效,因为整个索引都被访问,Oracle 此时
允许出现多块读(multiblock_read)。db_file_multiblock_read_count与paralle仅仅对index
fast full scan情形。其次paralle在新版Oracle
中是否支持待证实。一旦上述几个条件满足,基于成本的优化器根据表和索引的统计信息来调用 index full scan 或者index
fast full scan。
对于index fast full scan可以通过使用提示index_ffs来实现。
http://blog.csdn.net/narutobing/article/details/7888183