Oracle提供三種優化器模式:
預設為CHOOSE,但這是隱患:統計資訊過期或缺失會導致優化器誤判,產生全表掃描等劣質計劃。生產環境建議顯式設定為ALL_ROWS或FIRST_ROWS,並定時收集統計資訊。
NUM_ROWS、LEAF_BLOCKS、CLUSTERING_FACTOR)未同步更新,仍反映舊資料量。ALTER INDEX REBUILD隱含收集索引統計,暫時修正計劃;但隨DML進行,統計再次偏離。TRUNCATE TABLE target_table;
DROP INDEX idx_1; DROP INDEX idx_2; ... -- 刪除所有索引
-- 執行大量載入
INSERT /*+ APPEND */ INTO target_table SELECT ...;
-- 重建索引
CREATE INDEX idx_1 ON ...; CREATE INDEX idx_2 ON ...;
-- 關鍵:收集表與索引統計資訊
EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname=>'SCHEMA', tabname=>'TARGET_TABLE', cascade=>TRUE);
或使用ANALYZE TABLE ... COMPUTE STATISTICS(10g前),11g+強烈建議DBMS_STATS。
大量資料變更(Truncate/Partition Exchange/大量載入)後,必須同步更新統計資訊。依賴自動收集(Auto Task)有時間窗延遲,關鍵作業應顯式調用
DBMS_STATS,並設定NO_INVALIDATE=>FALSE立即刷新游標。