首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 效能優化實戰:新增查詢範圍限制避免全表掃描

     編輯:Oracle 教學

Oracle 效能優化實戰:新增查詢範圍限制避免全表掃描

針對大量資料表查詢,若 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。

注意事項

  1. 新增條件不得改變業務邏輯結果(邊界須涵蓋所有符合原條件的資料)。
  2. 若資料分布極不均勻,可能需搭配直方圖統計或 OPT_ESTIMATE 提示。
  3. 過度添加固定常數邊界可能導致計畫固化,建議改用繫結變數或動態 SQL。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved