关于索引重建

1.考虑重建索引的场合
  • 表上频繁发生update,delete操作。 

  • 表上发生了alter table ..move操作(move操作导致了rowid变化)。 

  • 移动索引到另一个表空间(注意和表区分,表移动使用move命令)。 

  • 改善空间使用,释放已经被删除条目所占的空间。


2.重建索引的作用

  • 通过重建索引来减少索引中的leaf blocks(偶尔也会改变blevel参数)参数的大小,但是重建对于clustering_factor没有影响。 

  • 重建索引可能会使得索引能够更好地满足优化器的需要,但是由此带来的副作用可能是好的也可能是坏的。好的方面是重建索引可以引入缓存功能,有利于减少查询时间。坏的方面是可能会引入对DML的争用,伴随着叶块分割数目和重做(redo)操作的增加,因此索引会"尝试"返回自己的平衡状态。


3.判断重建索引的标准

B树索引设计为总是平衡的,Oracle随着insert操作而连续的分裂索引块,但是,随着insert和delete操作,该索引会产生许多级,增加索引从根遍历的时间,降低了效率,此时需要重建索引。
(1).方法1(从dba_indexes视图中判断)
当级别深度到4或超过4时。(增加了从根遍历的时间)索引被分析后,进行检查。
select index_name,blevel from dba_indexes where blevel >=4;
(2).方法2(分析索引判断)
被删除数占总数的20%以上时。(增加了访问某项所访问的index块数)
A.索引结构分析
analyze index indexname validate structure;
B.查看结果
在执行步骤1的session中查询index_stats表,不要到别的session去查询。
select height,del_if_rows/lf_rows from index_stats;

select pct_used from index_stats;
C.判断标准
如果height>=4或者del_if_rows/lf_rows>0.2或者pct_used<75%;该索引考虑重建。

 

你可能感兴趣的:(oracle,update,insert,空间,副作用)