文章作者 100test 发表时间 2007:09:25 12:53:26
来源 100Test.Com百考试题网
对于DML操作来说,索引对于数据库是一个性能负担.如果索引没有被有效的使用,那么其存在性就值得从新考虑.
1. 从Oracle9i开始,Oracle允许你监视索引的使用:
SQL> connect scott/tiger@conner Connected to Oracle9i Enterprise Edition Release 9.2.0.4.0 Connected as scott SQL> 0select index_name from user_indexes. INDEX_NAME ------------------------------ PK_DEPT PK_EMP 开始监视pk_dept索引: SQL> alter index pk_dept monitoring usage. Index altered 在此过程中,如果查询使用索引,将会记录下来: SQL> 0select * from dept where deptno=10. DEPTNO DNAME LOC ------ -------------- ------------- 10 ACCOUNTING NEW YORK 停止监视: SQL> alter index pk_dept nomonitoring usage. Index altered 查询索引使用情况,YES表示在监视过程中索引被使用到: SQL> 0select * 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索引,并且不幸在重起数据库之前没有停止它,那么你的数据库将会无法启动,并且不会给出任何错误信息。
以下这条简单的语句可以轻易再现这个问题: