ITPub博客

首页 > Linux操作系统 > Linux操作系统 > index full scan vs index fast full scan(zt)

index full scan vs index fast full scan(zt)

原创 Linux操作系统 作者:linyuze 时间:2009-02-16 16:49:39 0 删除 编辑

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


因为索引树结构的特点,从叶子节点的左边到右边,才是顺序的,这个范围就是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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: cursor_sharing
请登录后发表评论 登录
全部评论

注册时间:2009-02-01

  • 博文量
    19
  • 访问量
    20497