首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 優化器選型指南:RULE、COST 與 CHOOSE 深度解析

     編輯:Oracle 資料庫相關知識

SQL 執行計劃的優劣直接決定查詢性能,而優化器模式的選擇是首要決策。本文系統梳理 Oracle 三大優化器特性、適用場景與配置最佳實踐。

三種優化器模式對比

模式全稱核心機制適用場景
RULE基於規則固定規則集,不依賴統計信息舊版本遷移、統計信息缺失環境
COST (CBO)基於成本依據對象統計信息計算執行成本現代生產環境首選,需定期 ANALYZE
CHOOSE選擇性有統計信息用 CBO,無則用 RULE過渡期預設值,易產生不穩定計劃

配置層級與生效優先級

優化器模式可在三個層級設定,優先級遞增:

  1. 實例級:init.ora 設定 OPTIMIZER_MODE = CHOOSE | RULE | COST | ALL_ROWS | FIRST_ROWS
  2. 會話級:ALTER SESSION SET OPTIMIZER_MODE = ...
  3. 語句級:Hint /*+ RULE */、/*+ FIRST_ROWS */ 等

核心建議:避免使用 CHOOSE

預設 CHOOSE 模式極易導致「部分表有統計、部分無」的混合場景,產生非最優計劃(如非預期全表掃描)。生產環境建議顯式指定 RULE 或 COST,並配合定時 ANALYZE / DBMS_STATS 維護統計信息。

表訪問路徑:全表掃描 vs ROWID 訪問

  • 全表掃描:順序讀取所有數據塊,多塊讀取(DB_FILE_MULTIBLOCK_READ_COUNT)優化吞吐,適合大比例數據檢索。
  • ROWID 訪問:索引提供邏輯值→物理位置映射,精準定位單行/少量行,OLTP 高頻查詢首選。

共享 SQL 與 Shared Pool 機制

Oracle 將解析後的 SQL 存放於 SGA 的 Shared Pool,實現游標複用,減少硬解析開銷。

共享條件(嚴格三重匹配)

  1. 字符級完全相同:大小寫、空格、換行皆需一致
    SELECT * FROM EMP; ≠ SELECT * from EMP; ≠ Select * From Emp;
  2. 引用對象完全相同:同義詞、擁有者解析後必須指向同一物理對象
  3. 綁定變量名稱一致::blk1.pin vs :blk1.ot_ind 視為不同語句

Shared Pool 參數調優

在 init.ora 設定適當 SHARED_POOL_SIZE:空間越大,可緩存語句越多,命中率越高。但需平衡記憶體總量,避免換頁。

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