oracle索引是加快查询速度,减少i/o操作的,但是如果索引无用的话
那他就是浪费资源的,尤其是在做DML操作时,这是 就需要我们查看
那些索引是无用的
相关视图:
user_indexes
user_ind_columns
v$object_usage
1. 查看表aa有哪些索引
SQL> select table_name,index_name from user_indexes
2 where table_name='AA';
TABLE_NAME INDEX_NAME
------------------------------ ----------------------------
AA IDX_FUNC
AA IDX_BITM
已用时间: 00: 00: 00.09
SQL>
2. 监控制定索引
SQL> alter index idx_func monitoring usage;
索引已更改。
已用时间: 00: 00: 00.39
SQL>select * from aa where rownum<100;
3. 查看索引是否被用
SQL> select * from v$object_usage;
未选定行
SQL>
4.查完索引是否被用后,记得要关闭索引监控
SQL> alter index idx_func nomonitoring usage;
5.监控数据库所有的索引
等数据库运的足够多的sql语句时,查询v$object_usage
打开所有索引监控脚本
spool run_monitoring.sql
select 'alter index ' ||owner||'.'|| index_name|| ' monitoring usage'
from dba_indexes;
where owner not in ('SYS','SYSTEM')
spool off
然后运行脚本 run_monitoring.sql
@run_monitoring.sql
记得监控完关闭监控