重温一下监控的语句:
alter index index_name monitoring usage;
alter index index_name nomonitoringusage;
====================================================================
通过对比v$object_usage以及user_indexes中的记录条数,发现少了2条:
SELECT *
FROM user_indexes a
WHERE NOT EXISTS (SELECT 1
FROM v$object_usage b
WHERE b.index_name = a.index_name)
而且这2条index的index_type都为LOB(查询user_indexes得出的,现在有的index_type为:“FUNCTION-BASED NORMAL”、“LOB”、“NORMAL”、“NORMAL/REV”)
对于LOB字段,进行alter index 。。。。monitoring usage时报错:
“ORA-22864: cannot ALTER or DROP LOB indexes”
====================================================================
对于索引需要进行以下分类:
1. 由于constraint建立的索引: 譬如: 主键、唯一键等;
2. 由于为了满足主外键因素,建立的索引,这样主键更新速度就非常快:
3. 为了配合应用,建立的索引 ---
只有第3类索引如果无人使用,可以删除
constraint_type的类型:
Type Code | Type Description | Acts On Level |
C | Check on a table | Column |
O | Read Only on a view | Object |
P | Primary Key | Object |
R | Referential AKA Foreign Key | Column |
U | Unique Key | Column |
V | Check Option on a view | Object |
====================================================================
如何区分上述3类索引:
第一类:
对于user_constraints表中,constraint_type为P、U的相关索引需要保留、
P、U的约束,都有对应的索引名字在user_constraints表中,可以直接匹配;
第二类:
这一类最麻烦,在user_constraints中,有约束记录,但是索引不是强制建立的,在user_constraints表中的index_name中是空的,需要自己进行匹配;
第三类:
剩下的都是属于第三类;
====================================================================
这样找出和PrimaryKey,ForeignKey、以及Unique约束无关的索引了
====================================================================
有些时候,一个表需要使用到好几条索引,而且索引最前面的有几个字段和外键的顺序一样,这样就会引起一定的问题。
这个时候就不管了,只要是没有使用到了,一律停止该索引