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

Oracle 三大優化器模式深度解析:RULE、COST 與 CHOOSE

     編輯:Oracle 資料庫基礎

優化器模式概覽

Oracle 提供三種優化器模式,透過 init.ora 中的 OPTIMIZER_MODE 參數或 Session/SQL 層級覆寫設定:

  • RULE(基於規則):依據固定規則集決定執行計劃,不考慮資料統計資訊
  • COST(基於成本,CBO):根據物件統計資訊計算各執行路徑成本,選擇最低成本路徑
  • CHOOSE(選擇性):若表有統計資訊則用 CBO,否則回退 RBO

參數設定值說明

參數值行為
RULE強制使用規則基礎優化器
COST強制使用成本基礎優化器
CHOOSE預設值,視統計資訊決定
ALL_ROWSCBO 模式,優化整體吞吐量
FIRST_ROWSCBO 模式,優化首筆回應速度

關鍵最佳實務

1. CBO 需定期收集統計資訊

使用 ANALYZE 或 DBMS_STATS 套件維護物件統計資訊,確保 CBO 擁有準確的基數估算。

2. 避免使用 CHOOSE

預設的 CHOOSE 模式容易導致非預期的全表掃描。建議明確指定 ALL_ROWS 或 FIRST_ROWS,或在 Session 層級設定:

ALTER SESSION SET OPTIMIZER_MODE = ALL_ROWS;
-- 或
ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS;

3. SQL 層級 Hint 覆寫

SELECT /*+ RULE */ * FROM emp;
SELECT /*+ ALL_ROWS */ * FROM emp;
SELECT /*+ FIRST_ROWS(10) */ * FROM emp;

模式選擇建議

  • OLTP 系統:優先 FIRST_ROWS_n 確保回應速度
  • 資料倉庫/報表:使用 ALL_ROWS 最大化吞吐量
  • 舊版應用遷移:暫時用 RULE 維持相容,再逐步轉型

正確選擇並配置優化器模式,是 SQL 調優的基石。建議在資料庫建立階段即確立標準,避免混用模式導致效能不穩定。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved