Oracle 提供三種優化器:RULE(規則)、COST(成本)、CHOOSE(選擇性)。預設 CHOOSE 模式會根據表是否被 ANALYZE 自動切換 CBO/RBO,極易導致非預期的全表掃描。
init.ora 明確設定 OPTIMIZER_MODE=RULE 或 COST,並在 Session/SQL 層級按需覆蓋ANALYZE 更新統計資訊,否則退回 RBO| 存取方式 | 機制 | 適用場景 |
|---|---|---|
| 全表掃描 | 多區塊讀取(DB_FILE_MULTIBLOCK_READ_COUNT),順序讀取所有資料區塊 | 小表、大比例資料檢索、無可用索引 |
| ROWID 存取 | 索引 → ROWID → 資料區塊,定位物理位置 | 高選擇性查詢、主鍵/唯一索引掃描 |
索引建立在高選擇性欄位上,可將邏輯 I/O 降低數量級。
首次解析後,SQL 文本、執行計劃存入 SGA Shared Pool。後續相同語句直接復用,省去解析與優化開銷。
SELECT * FROM EMP; ≠ SELECT * FROM emp;:blk1.pin vs :blk1.ot_ind 視為不同語句init.ora 適度調大 SHARED_POOL_SIZE,提升命中率V$LIBRARYCACHE 監控)優化器模式鎖定、索引存取驗證、共享池管理構成 Oracle 效能基石三角。將這些原則內化為開發規範,勝過事後百倍調優成本。