当某个索引处于monitoring usage的时候,如果使用dbms_stats去分析表并且同时分析索引,会将该索引的v$object_usage.USED设置为TRUE,导致监控了N天的可疑索引前功近弃。这并不是我们所希望的.

如果使用analyze,索引的状态不会被设置为USE = TRUE

在10gR2中仍然有种情况

SQLcreate table test  as select *
    
from dba_objects;
Table created.
 
SQL> create index test_idx on test(object_id);
Index created.
 
SQL> alter index test_idx monitoring usage;
Index altered.
 
SQL>select * from v$object_usage;
INDEX_NAME    TABLE_NAME     MON    USE
----------------------------
-- ------------
TEST_IDX            TEST           YES     NO
 
SQL>analyze table test  compute  statistics;
Table analyzed.
 
SQL>select * from v$object_usage;
INDEX_NAME    TABLE_NAME     MON    USE
----------------------------
-- ------------
TEST_IDX            TEST           YES     NO
 
SQL> exec dbms_stats.gather_table_stats(user,'test',cascade=>true);
PL/SQL procedure successfully completed.
 
SQL>select * from v$object_usage;
INDEX_NAME    TABLE_NAME     MON    USE
----------------------------
-- ------------
TEST_IDX            TEST           YES     YES

需要注意。