数据库使用久了会发现表示有很多索引,严重可能影响dml操作,因此可以使用索引监控发现那些索引不使用,进行删除:
1.监控索引:
alter index index_name_xxxx MONITORING USAGE;
取消索引监控:
alter index index_name_xxxx NOMONITORING USAGE;
可以根据表名字批量生产监控索引的语句:
select 'alter index ' || index_name || ' MONITORING USAGE;' from user_indexes where table_name = 'table_name_xxxx';
或者直接查询获取索引名字:
select index_name from user_indexes ;
2.查看索引监控情况:
SELECT * FROM V$OBJECT_USAGE;
INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
IDX_STATUS T_APP_USER_N YES NO 10/01/2018 10:24:43
正常可以监控一个星期或者更久,自己根据业务或者平时的sql决定:
可以先设置索引invisible:
alter index IDX_STATUS invisible;
如果需要使用,可以打开visible
alter index IDX_STATUS visible;
3.观察一段时间没有问题可以删除,建议删除之前可以备份下创建索引的语句:
drop index IDX_STATUS;
4.索引rebuild,指定pctfree:
alter index IDX_STATUS rebuild online parallel 4 pctfree 20;
alter index IDX_STATUS parallel 1;