建议每周监测一次索引的碎片情况,根据情况制定索引的重建频率以提高索引使用效率。
SQL> analyze index structure;
SQL> select name,del_lf_rows_len,lf_rows_len,(del_lf_rows_len/lf_rows_len)*100 from index_stats;
索引碎片率(%) = (被删除的索引长度/索引总长)*100
SQL> alter indexrebuild;
SQL> alter indexcoalesce;
这样是不是就算对索引碎片进行了分析和整理了呢
1.如果索引的叶子行的碎片超过10%,考虑对索引进行重建。
alter index 用户名.索引名 rebuildtablespace 表空间名storage(initial 初始值 next 扩展值)nologging
重建索引时要注意以下几点:
a.如果不指定tablespace名,索引将建在用户的默认表空间。
b.如果不指定nologging,将会写日志,导致速度变慢。由于索引的重建没有恢复的必要,所以,可以不写日志。
c.如果出现资源忙,表明有进程正在使用该索引,等待一会再提交。
alter index 索引名 rebuildtablespace 索引表空间名storage(initial 初始值 next 扩展值)nologging/
2.如果出于空间或其他考虑,不能重建索引,可以整理索引。
alter index用户名.索引名 coalesce