SELECT * FROM t1 WHERE a = 1000 (落在 P02 分區)。TABLE ACCESS (BY LOCAL INDEX ROWID) OF 'T1'
INDEX (RANGE SCAN) OF 'T1_IDX' (NON-UNIQUE)
Consistent Gets: 40
TABLE ACCESS (FULL) OF 'T1' (Partition Pruned to P02)
Consistent Gets: 948
強制 Hint /*+ INDEX(t1) */ 後恢復索引掃描,Consistent Gets 僅 37。
Cost = BLEVEL
+ CEIL(LEAF_BLOCKS * Effective Index Selectivity)
+ CEIL(CLUSTERING_FACTOR * Effective Table Selectivity)
CLUSTERING_FACTOR 為全表級 (639,968),但 Effective Table Selectivity 卻取分區級 (0.001)。CLUSTERING_FACTOR = 32,000,成本正確評估為 33。10g 在「索引鍵全等值條件」下,回表成本改用 DISTINCT_KEYS 計算選擇率,不再錯用分區級選擇率,避免此 Bug。
DBMS_STATS.GATHER_TABLE_STATS(..., GRANULARITY=>'PARTITION') 收集分區級統計。CLUSTERING_FACTOR 與分區選擇率是否匹配。某省核心系統因分區鍵建 Global Index,導致高併發查詢全分區掃描,CPU 飆升,改為 Local Index 後效能提升 20 倍。