index full scan vs index fast full scan(zt)

这是通过索引访问的两种方式。


因为索引树结构的特点,从叶子节点的左边到右边,才是顺序的,这个范围就是index range scan。最大的index range scan就是从最左边到最右边,这个就是index full scan。这里io可能比较多,只读叶子节点,但数据顺序和索引排序一样。索引的叶子节点的顺序和索引的segment中extent以及block的顺 序是没有关系的。

如果是唯一索引,就只有一个rowid ,不是唯一索引,一律是range scan。range scan的特例就是整个索引或者只有一条记录,最后都是通过rowid找到那条记录的。


index fast full scan是根据extent id逐个block扫描的,这个时候对于索引block来说,跟full table scan的特性是一样的。它的优点是io数量少,快。也就是说,假设索引有3个extent,每个extent恰好16个block,而数据库每次io最 多是16个block,则3个io就可以了。但缺点是里面的block 包含了叶子,枝,根,数据出来是没有顺序的。

比如索引 ind(a,b,c)

select  b,c  from ...

select  a,c from ...

select  a,b,c  from ...

只要所需要获得的数据都被包含在索引中而不需要去表中获得,并且不为null的查询,就可以走index fast full scan。

可用index_ffs(tablename indexname)提示使用index fast full scan。


汪海在他的msn 有详细的说明:http://spaces.msn.com/members/wzwanghai/Blog/cns!1p6cztYuyVBgutMjvxSWkuhw!171.entry

当进行index full scan的时候oracle定位到索引的root block,然后到branch block(如果有的话),在定位到第一个leaf block,然后根据leaf block的双向链表顺序读取。它所读取的块都是有顺序的,也是经过排序的。
 
而index fast full scan则不同,它是从段头开始,读取包含位图块,root block,所有的branch block,leaf block,读取的顺序完全有物理存储位置决定,并采取多块读,没次读取db_file_multiblock_read_count个块。

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

转载于:http://blog.itpub.net/104446/viewspace-553467/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值