/*
结论:我们可以通过alter index xxx monitoring usage的命令,对具体的索引进行监控,通过查询v$object_usage视图的USED
字段的取值是YES还是NO,就可以知道该索引是否被使用过,具体如下:
*/
----观察查询出来的结果,删除不常使用的索引,控制索引的数量。
drop table t purge;
create table t as select * from dba_objects;
create index idx_t_id on t (object_id);
alter index idx_t_id monitoring usage;
--直接简单查询这个(因为v$object_usage只包括当前用户的索引使用记录,如果需要查出所有用户的索引使用记录,使用下面的sql)
set linesize 166
col INDEX_NAME for a10
col TABLE_NAME for a10
col MONITORING for a10
col USED for a10
col START_MONITORING for a25
col END_MONITORING for a25
select * from v$object_usage;
INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
---------- ---------- ---------- ---------- ------------------------- ---------------
IDX_T_ID T YES NO 12/14/2013 07:44:36
--接下来继续执行一个用都索引的查询
set autotrace traceonly
select * from t where object_id=10;
--然后再观察
set autotrace off
select * from v$object_usage;
INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
---------- ---------- ---------- ---------- ------------------------- ---------------
IDX_T_ID T YES YES 12/14/2013 07:44:36
注:
---停止对索引的监控,观察v$object_usage状态变化
alter index idx_t_id nomonitoring usage;
INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
---------- ---------- ---------- ---------- ------------------------- --------------------
IDX_T_ID T NO YES 12/14/2013 07:44:36 12/14/2013 07:46:45
--如果针对当前用户下所有索引都监控,可以如下
select 'alter index '||index_name||' monitoring usage;'
from user_indexes;