1. 如果你打开监控索引的情况下,通过v$object_usage视图可以知道索引是否使用,这为我们删除多余的索引很有帮助 
  2. SQL> desc v$object_usage; 
  3.  Name                                      Null?    Type 
  4.  ----------------------------------------- -------- ---------------------------- 
  5.  INDEX_NAME                                NOT NULL VARCHAR2(30) 
  6.  TABLE_NAME                                NOT NULL VARCHAR2(30) 
  7.  MONITORING                                         VARCHAR2(3) 
  8.  USED                                               VARCHAR2(3) 
  9.  START_MONITORING                                   VARCHAR2(19) 
  10.  END_MONITORING                                     VARCHAR2(19) 
  11.  
  12. --打开索引监控 
  13. SQL> alter index idx_test_oid monitoring usage; 
  14.  
  15. Index altered. 
  16.  
  17. --可以看在此视图中有一条记录,但use字段显示为no,表示此索引还未使用 
  18. SQL> select * from v$object_usage; 
  19.  
  20. INDEX_NAME                     TABLE_NAME                     MON USE START_MONITORING    END_MONITORING 
  21. ------------------------------ ------------------------------ --- --- ------------------- ---------- 
  22. IDX_TEST_OID                   TEST                           YES NO  05/06/2007 20:35:56 
  23.  
  24. SQL> 
  25. SQL> 
  26. --使用索引 
  27. SQL> select * from test where object_id=1; 
  28.  
  29. no rows selected 
  30.  
  31. --这时我们看到use字段已变成YES,表时此索引自监控以来,被使用过,但使用的次数不知道。 
  32. SQL> select * from v$object_usage; 
  33.  
  34. INDEX_NAME                     TABLE_NAME                     MON USE START_MONITORING    END_MONITORING 
  35. ------------------------------ ------------------------------ --- --- ------------------- ---------- 
  36. IDX_TEST_OID                   TEST                           YES YES 05/06/2007 20:35:56 
  37.  
  38. SQL> 
  39. SQL> 
  40. --使用以下语法停止索引监控 
  41. SQL> alter index idx_test_oid nomonitoring usage; 
  42.  
  43. Index altered. 
  44.  
  45. SQL> select * from v$object_usage; 
  46.  
  47. INDEX_NAME                     TABLE_NAME                     MON USE START_MONITORING    END_MONITORING 
  48. ------------------------------ ------------------------------ --- --- ------------------- ---------- 
  49. IDX_TEST_OID                   TEST                           NO  YES 05/06/2007 20:35:56 05/06/2007 20:40:35 
  50.  
  51. --那我们如何删除这些监控记录了 
  52. SQL> delete from object_usage; 
  53. delete from object_usage 
  54.             * 
  55. ERROR at line 1: 
  56. ORA-00942: table or view does not exist 
  57.  
  58. --这个视图建立在sys用户下的object_usage 上 
  59. SQL> conn sys/sys as sysdba 
  60. Connected. 
  61. SQL> delete from object_usage; 
  62.  
  63. 1 row deleted. 
  64.  
  65. SQL> commit
  66.  
  67. Commit complete. 
  68.  
  69. --我们再次查询,发现没有记录了 
  70. SQL> conn test/test 
  71. Connected. 
  72. SQL> select * from v$object_usage; 
  73.  
  74. no rows selected