大量無效索引會:
Oracle 內建 MONITORING USAGE 機制,零成本識別「是否被使用」。
SELECT INDEX_NAME, TABLE_NAME, NUM_ROWS
FROM DBA_INDEXES
WHERE TABLE_NAME = 'WEBSITE_VIEW_TB';
ALTER INDEX CURRTIME_IDX MONITORING USAGE;
SELECT COUNT(*) FROM LOG.WEBSITE_VIEW_TB
WHERE CURRTIME BETWEEN TO_DATE('2013-01-27','YYYY-MM-DD') AND TO_DATE('2013-01-28','YYYY-MM-DD');
SELECT * FROM V$OBJECT_USAGE;
-- 關鍵欄位:
-- USED = YES/NO 監控期間是否被使用過
-- MONITORING = YES/NO 是否正在監控
-- START_MONITORING / END_MONITORING 監控時間窗
ALTER INDEX CURRTIME_IDX NOMONITORING USAGE;
| 階段 | MONITORING | USED | START_MONITORING | END_MONITORING |
|---|---|---|---|---|
| 剛開啟 | YES | NO | 2013-08-20 14:19:48 | |
| 執行查詢後 | YES | YES | 2013-08-20 14:19:48 | |
| 關閉監控 | NO | YES | 2013-08-20 14:19:48 | 2013-08-20 14:32:18 |
| 再次開啟 | YES | NO | 2013-08-20 14:34:15 |
DBA_HIST_SQL_PLAN、V$SQL_PLAN 分析具體 SQL 使用情況DBA_INDEX_USAGE(需 DBMS_STATS.SET_GLOBAL_PREFS('INDEX_USAGE_TRACKING','TRUE'))獲得更豐富統計USED=NO 且無業務特殊需求(如外鍵支撐、定期批次報表)的索引 → 評估刪除