Chinaunix首页 | 论坛 | 博客
  • 博客访问: 605136
  • 博文数量: 841
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-28 10:08
文章分类

全部博文(841)

文章存档

2011年(1)

2008年(840)

我的朋友

分类:

2008-10-28 10:11:44


  重建索引到底要不要排序?有人说要,因为创建索引时需要排序。有人说不要,因为重建索引的时候可以直接扫描旧的索引来重建成新的索引。让我们来看一下rebuild index到底需不需要排序。
  
  SQL> select name,statistic# from v$statname where name like '%sort%';
  
  NAME                               STATISTI
  ---------------------------------------------------------------- ----------
  sorts (memory)                          242
  sorts (disk)                           243
  sorts (rows)                           244
  
  看一下排序操作相关的 stat号
  
  再看一下rebuild index 的执行路径 SQL> explain plan for alter index ind_test_id rebuild;
  
  Explained.
  
  SQL> @?/rdbms/admin/utlxpls
  
  PLAN_TABLE_OUTPUT
  -----------------------------------------------------------------------
  | Id | Operation       | Name    | Rows | Bytes | Cost |
  -----------------------------------------------------------------------
  |  0 | ALTER INDEX STATEMENT |       | 17837 | 71348 |  11 |
  |  1 | INDEX BUILD NON UNIQUE| IND_TEST_ID |    |    |    |
  |  2 |  SORT CREATE INDEX  |       | 17837 | 71348 |    |
  |  3 |  INDEX FAST FULL SCAN| IND_TEST_ID | 17837 | 71348 |  11 |
  -----------------------------------------------------------------------
  执行下rebuild 看看
  
  SQL> select STATISTI,value from v$mystat where STATISTI in(242,243,244);
  STATISTIC#   VALUE
  ---------- ----------
      242    154
      243     0
      244    242
  
  
  SQL> alter index ind_test_id rebuild;
  
  Index altered.
  
  SQL> select STATISTIC#,value from v$mystat where STATISTIC# in(242,243,244);
  STATISTIC#   VALUE
  ---------- ----------
      242    155
      243     0
      244    242
  可以看出sort(memory)增加了一次
  
  为什么要排序呢?因为rebuild index的时候走的index ffs,而ffs搜索的顺序是根据 leaf block 的物理顺序相关而跟键值的逻辑顺序无关(在"index full scan vs fast index full scan"这篇文章中有详细介绍), 所以ffs的结果必须再做一次排序。
  
  此外在rebulid index online的时候走的是full table scan,这时候也是需要排序的,而且排序的次数会比较多, 在中发现每次做rebuild online产生4(10g中为13)次sort(memory),可能跟一些递规排序有关系。10g里面重建索引排序又有了一些改变,在10032事件的跟踪文件里面出现“Reopened sort”,目前暂时不知道是什么意思,希望有朋友能就这个问题进行探讨。
【责编:admin】

--------------------next---------------------

阅读(1240) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~