龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

Oracle数据库中索引树的结构与块尺寸(1)(2)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
在这个测试中,将对某个使用8K数据块尺寸的Oracle 9i数据库执行以下查询,这个数据库同时也使用16K缓冲区和16K大小的表空间。 以下是代码片段: select

在这个测试中,将对某个使用8K数据块尺寸的Oracle 9i数据库执行以下查询,这个数据库同时也使用16K缓冲区和16K大小的表空间。

以下是代码片段:
 

  1.  select   
  2. count(*)   
  3. from   
  4. eradmin.admission   
  5. where   
  6. patient_id between 1 and 40000; 

以下是代码片段:

  1.  Execution Plan   
  2. SELECT STATEMENT Optimizer=CHOOSE   
  3. (Cost=41 Card=1 Bytes=4)   
  4. 1 0 SORT (AGGREGATE)   
  5. 2 1 INDEX (FAST FULL SCAN) OF 'ADMISSION_PATIENT_ID'   
  6. (NON-UNIQUE) (Cost=41 Card=120002 Bytes=480008)   

以下是代码片段:
 

  1.  Statistics   
  2. 0 recursive calls   
  3. 0 db block gets   
  4. 421 consistent gets   
  5. 0 physical reads   
  6. 0 redo size   
  7. 371 bytes sent via SQL*Net to client   
  8. 430 bytes received via SQL*Net from client   
  9. 2 SQL*Net roundtrips to/from client   
  10. 0 sorts (memory)   
  11. 0 sorts (disk)   
  12. rows processed   


为了测试新的16K缓冲区和16K表空间的效果,将使用16K的表空间来重建这个查询所用的索引,16K的表空间和原来的8K的表空间相比,除了更大的块尺寸其他特性一模一样。

以下是代码片段:

  1.  alter index   
  2. eradmin.admission_patient_id   
  3. rebuild nologging noreverse tablespace indx_16k;   


一旦在16K表空间中建立好这个索引,就再次执行这个查询(同样也是执行两次),会产生以下的运行时统计信息:

以下是代码片段:

  1.  Statistics   
  2. 0 recursive calls   
  3. 0 db block gets   
  4. 211 consistent gets   
  5. 0 physical reads   
  6. 0 redo size   
  7. 371 bytes sent via SQL*Net to client   
  8. 430 bytes received via SQL*Net from client   
  9. 2 SQL*Net roundtrips to/from client   
  10. 0 sorts (memory)   
  11. 0 sorts (disk)   
  12. rows processed   


正如你所看到的,逻辑读操作的次数被减少了一半,仅仅是由于使用了新的16K表空间和16K数据缓冲区。很显然,正确使用新的数据缓冲区和Oracle9i及其以上版本的多种块尺寸表空间的特色,很值得在你的数据库中被试验和研究。

定期进行索引重建?

争论的另外一个领域是:是否存在一些确定的规则可以用来确定何时能够从索引重建中获取性能提高。许多使用Oracle的企业都定期进行索引重建,并声称在他们和重建他们的Oracle B-树索引后获得了相当大的速度提升。

在“Oracle世界2003”上,展示了Sushil Kumar所著的一篇题为“Oracle数据库10g:自我管理的数据库”的文章,Kumar声明说Oracle10g的“自动维护任务”(AMT)特色将自动检测并重建潜在的最优化的索引。

“自动工作负载信息库(AWR)给oracle10g提供了关于数据库各种使用情况的详细信息。通过分析存储在自动工作负载信息库(AWR)中的信息,10g数据库可以决定是否需要执行数据库性能维护任务,比如优化器统计数字的刷新、重建索引等等。 以“自动维护任务”AMT为基础,oracle数据库可以自动执行这些操作。”

尽管如此,仍有不少反对定期重建索引的论点。一些oracle内部的专家坚持认为oracle索引在空间重用和访问速度上是非常高效的,b-树索引在极少情况下才需要被重建。他们坚持认为逻辑输入输出的减少应该是可测量的,并且如果重建索引是有好处的,某些人应该已经提出了可以证明的规则。

结论

多种数据块尺寸的特色能够提高Oracle索引的性能,而且在某些情况下重建索引可以提高查询速度,这是显而易见的。人们期望新的Oracle10g“自动维护任务”AMT允许自动检测并重建潜在的最优化索引结构。希望上文中涉及到的内容对大家能够有所帮助。

精彩图集

赞助商链接