索引加速查詢但佔用空間 (常超過表大小)、增加 DML 開銷。9i 前難知索引是否被用,導致大量廢棄索引長期佔用資源。
ALTER INDEX idx_name MONITORING USAGE; ALTER INDEX idx_name NOMONITORING USAGE;
SELECT index_name, table_name, monitoring, used,
start_monitoring, end_monitoring
FROM v$object_usage;
| 欄位 | 說明 |
|---|---|
| INDEX_NAME | 索引名稱 |
| TABLE_NAME | 所屬表名 |
| MONITORING | YES/NO 是否正在監控 |
| USED | YES/NO 監控期間曾被使用 |
| START_MONITORING | 開始時間 |
| END_MONITORING | 結束時間 |
CREATE OR REPLACE VIEW SYS.V$ALL_OBJECT_USAGE (
OWNER, INDEX_NAME, TABLE_NAME, MONITORING, USED,
START_MONITORING, END_MONITORING
) AS
SELECT u.name, io.name, t.name,
DECODE(BITAND(i.flags,65536),0,'NO','YES'),
DECODE(BITAND(ou.flags,1),0,'NO','YES'),
ou.start_monitoring, ou.end_monitoring
FROM sys.obj$ io, sys.obj$ t, sys.ind$ i, sys.object_usage ou, sys.user$ u
WHERE i.obj# = ou.obj#
AND io.obj# = ou.obj#
AND t.obj# = i.bo#
AND io.owner# = u.user#;
GRANT SELECT ON SYS.V$ALL_OBJECT_USAGE TO PUBLIC;
CREATE PUBLIC SYNONYM V$ALL_OBJECT_USAGE FOR SYS.V$ALL_OBJECT_USAGE;
MONITORING USAGE 重置統計,清除舊記錄、記錄新開始時間。NOMONITORING USAGE 記錄結束時間、停止後續監控。USED = 'NO' 且無業務特殊用途 (如外鍵鎖避免全表掃描) → 評估 DROP INDEX。V$SEGMENT_STATISTICS 看 Logical Reads/Physical Reads 量化索引貢獻。