table access by index rowid? index single value? index range scan? |
FULL_SCAN
FAST_FULL_SCAN
SKIP_SCAN
INDEX_JOIN(BITMAP CONVERSATION)
简单的说索引分 单块所扫和多块索引扫。单块和多块的区别你应该知道。什么时候用单块,当ORACLE不知道下一步要怎么做的时候就一定是单块。既然不知道,用多块有什么意义? 如果知道下一步应该怎么走,为什么用单块? 毕竟单块效率低下。
index fast full scan,索引快速扫描。 获取的数据不需要排序,既然不要排序,当然一扫而过,所以肯定是多块获取。所以index fast full scan效率肯定高于index table full scan
index table full scan,索引全扫描,索引全扫描一定是按照排序输出,也就是数据已经排好序了。那么这个是用单块扫还是多块扫? 我感觉是单块+多块。??如果全用单块,ORACLE就太傻了。但是毕竟要按顺序出数据,所以单块是避免不了。这也是为什么上面说效率会低于FFS。
index skip scan, index range scan 这些都属于范围扫描了。单块。 ORACLE不可能一开始就查询哪些BLOCK在一个区段,然后还要查询这些数据范围是否在同一个区段,所以ORACLE只能通过brance查询指向leaf的指针,一个一个这么找。 这也是为什么当查询数据太多时,使用索引效率其实不好,不如全表扫描,因为全扫是多块。
有了概念再来看看你问的,table access by index rowid、index single value、index range scan