針對大量資料表查詢,若 WHERE 條件僅有單邊界(如 ActionTime < '2001-03-01'),優化器往往選擇全表掃描。若能補上另一邊界,使查詢落入已知範圍,即可誘導索引範圍掃描,大幅提升效能。
SELECT * FROM record
WHERE ActionTime < TO_DATE('20010301', 'yyyymmdd');
執行計畫顯示 TABLE ACCESS FULL。
SELECT * FROM record
WHERE ActionTime < TO_DATE('20010301', 'yyyymmdd')
AND ActionTime > TO_DATE('20010101', 'yyyymmdd');
若 ActionTime 有索引,優化器將改為 INDEX RANGE SCAN,I/O 量大幅下降。
OPTIMIZER_DYNAMIC_SAMPLING 或 CARDINALITY 提示,讓優化器在執行時依實際值決定最佳路徑。> 某值 查詢,若知最大可能值,同樣加上 AND col < MAX_VAL。OPT_ESTIMATE 提示。