对于DML操作来说,索引对于数据库是一个性能负担.如果索引没有被有效的使用,那么其存在性就值得从新考虑. 1. 从Oracle9i开始,Oracle允许你监视索引的使用: SQL> connect scott/tiger@conner
Connected to Oracle9i Enterprise Edition Release 9.2.0.4.0
Connected as scott
SQL> select index_name from user_indexes;
INDEX_NAME
------------------------------
PK_DEPT
PK_EMP
开始监视pk_dept索引:
SQL> alter index pk_dept monitoring usage;
Index altered
在此过程中,如果查询使用索引,将会记录下来:
SQL> select * from dept where deptno=10;
DEPTNO DNAME LOC
------ -------------- -------------
10 ACCOUNTING NEW YORK
停止监视:
SQL> alter index pk_dept nomonitoring usage;
Index altered
查询索引使用情况,YES表示在监视过程中索引被使用到:
SQL> select * from v$object_usage;
INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING
----------------- ------------------ ---------- ---- ------------------- -------------------
PK_DEPT DEPT NO YES 10/28/2004 10:55:19 10/28/2004 10:55:47
SQL>
|
2.Oracle9i的Bug 在9205之前,如果你不慎监控了SYS.I_OBJAUTH1索引,并且不幸在重起数据库之前没有停止它,那么你的数据库将会无法启动,并且 不会给出任何错误信息。 以下这条简单的语句可以轻易再现这个问题: 'ALTER INDEX SYS.I_OBJAUTH1 MONITORING USAGE' 如果你有了足够好的备份(严重警告,请不要拿你的生产数据库进行测试
|