ITPub博客

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

index full scan vs index fast full scan

原创 Linux操作系统 作者:babylonia 时间:2009-06-19 15:39:09 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。

当进行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个块。

SQL> select /*+ index_ffs(aa_t inde_aa_t_full)*/ object_id from aa_t order by object_id;
用时: 00: 00: 00.01

执行计划»®
----------------------------------------------------------
Plan hash value: 3590010033

--------------------------------------------------------------------------------
----------------

| Id | Operation             | Name           | Rows | Bytes |TempSpc| Cost (%
CPU)| Time     |

--------------------------------------------------------------------------------
----------------

|   0 | SELECT STATEMENT      |                | 50035 |   195K|       |   194
(5)| 00:00:03 |

|   1 | SORT ORDER BY        |                | 50035 |   195K| 1192K|   194
(5)| 00:00:03 |

|   2 |   INDEX FAST FULL SCAN| INDE_AA_T_FULL | 50035 |   195K|       |    42
(3)| 00:00:01 |

--------------------------------------------------------------------------------
----------------

而:

SQL> select object_id from aa_t order by object_id;
用时: 00: 00: 00.00

执行计划»®
----------------------------------------------------------
Plan hash value: 110832887

-------------------------------------------------------------------------------
| Id | Operation        | Name       | Rows | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |            | 50035 |   195K|   114   (2)| 00:00:02 |
|   1 | INDEX FULL SCAN | INDE_AA_T1 | 50035 |   195K|   114   (2)| 00:00:02 |
-------------------------------------------------------------------------------

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

下一篇: index unique scan
请登录后发表评论 登录
全部评论

注册时间:2008-01-31

  • 博文量
    44
  • 访问量
    41333