"INDEX_STATS
" stores information from the last
ANALYZE INDEX ... VALIDATE STRUCTURE
statement.
上面语句意思是说index_stats存储最后一次对索引分析结构的信息.
判断一个所以是否需要重建,我们介绍一个简单的方法:对一个索引进行结构分析后,如果该索引占用超过了一个数据块,且满足以下条件之一: B-tree树的高度大于3;使用百分比低于75%;数据删除率大于15%,就需要考虑对索引重建:
analyze index t_test1_idx1 validate structure;
Index analyzed.
SQL> select btree_space, -- if > 8192(块的大小)
2 height, -- if > 3
3 pct_used, -- if < 75
4 del_lf_rows/(decode(lf_rows,0,1,lf_rows)) *100 as deleted_pct -- if > 20%
5 from index_stats;
BTREE_SPACE HEIGHT PCT_USED DELETED_PCT
----------- ---------- ---------- -----------
880032 2 89 0
如果超出了if 后面的值即可能需要进行 index rebuild.
注:index_stats只能在执行analyze的语句的session会话中看到数值,另外的会话是看不到的.即当前会话只能看到当前analyze分析后的结果.
--
可以用下面的过程分析所有的索引,将其写入一张普通表中
DECLARE
BEGIN
EXECUTE IMMEDIATE 'truncate table stats_indexes';
FOR REC IN (SELECT INDEX_NAME FROM USER_INDEXES WHERE TABLE_OWNER = 'CITRIX') LOOP
EXECUTE IMMEDIATE 'analyze index ' || REC.INDEX_NAME || ' validate structure';
INSERT INTO STATS_INDEXES
SELECT * FROM INDEX_STATS;
COMMIT;
END LOOP;
END;
参考:
http://www.hellodba.com/Doc/oracle_IO(6).htm
http://www.lslnet.com/linux/f/docs1/i49/big5338353.htm