监控索引是否使用

/*  
  结论:我们可以通过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;
请使用浏览器的分享功能分享到微信等