前言:数据库运行了一段时间之后,由于频繁的进行了增删改,索引就会产生碎片,碎片多了自然而然的就会影响查询的效率。通过ORACLE提供的一些管理视图和工具就可以分析出数据库的哪些索引由于碎片太多需要进行重建;
一、查找数据库比较占用空间的索引
需要根据业务设定搜索的条件,索引大小大于特定值,索引的层数大于1的索引
Select a.index_name,a.table_name,a.blevel,B.BLOCKS*8/1024 MB,b.bytes
from dba_indexes a,dba_segments b
Where a.index_name=b.segment_name and a.owner=b.owner and b.segment_type='INDEX'
And a.blevel>1 and B.BLOCKS*8/1024>'&B'
And b.tablespace_name='&A';
二、进行索引的分析
2.1 标准的SQL语句如下:
analyze index index_name validate structure;
例如:schemas:ekpj
table_name:I_SYS_WF_HISTO_PROCESS_ID1
脚本:analyze index ekpj. I_SYS_WF_HISTO_PROCESS_ID1 validate structure;
2.2 查看分析结果:
select name,height, del_lf_rows, lf_rows,
round((del_lf_rows/(lf_rows+0.0000000001))*100) "Frag Percent" from
index_stats;
当Frag Percent大于10的时候,即可对索引进行重建;
三、索引重建的脚本
ALTER INDEX index_name
REBUILD
NOCOMPRESS
NOPARALLEL
NOLOGGING
TABLESPACE USERS
STORAGE (
INITIAL 38M
NEXT 1M
)
ONLINE;
总结:
需要通过业务了解哪些表会频繁的进行增删改,因为索引碎片产生的原因是由于增删改操作导致的,知道了这些操作将事半功倍;
进行索引重建必须放在业务的空闲期操作,避免影响业务的正常操作;
本文转自ICT时空 dbasdk博客,原文链接:ORACLE索引的管理,如需转载请自行联系原博主。