Oracle 提供三種優化器模式,透過 init.ora 中的 OPTIMIZER_MODE 參數或 Session/SQL 層級覆寫設定:
| 參數值 | 行為 |
|---|---|
| RULE | 強制使用規則基礎優化器 |
| COST | 強制使用成本基礎優化器 |
| CHOOSE | 預設值,視統計資訊決定 |
| ALL_ROWS | CBO 模式,優化整體吞吐量 |
| FIRST_ROWS | CBO 模式,優化首筆回應速度 |
使用 ANALYZE 或 DBMS_STATS 套件維護物件統計資訊,確保 CBO 擁有準確的基數估算。
預設的 CHOOSE 模式容易導致非預期的全表掃描。建議明確指定 ALL_ROWS 或 FIRST_ROWS,或在 Session 層級設定:
ALTER SESSION SET OPTIMIZER_MODE = ALL_ROWS;
-- 或
ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS;
SELECT /*+ RULE */ * FROM emp;
SELECT /*+ ALL_ROWS */ * FROM emp;
SELECT /*+ FIRST_ROWS(10) */ * FROM emp;
FIRST_ROWS_n 確保回應速度ALL_ROWS 最大化吞吐量RULE 維持相容,再逐步轉型正確選擇並配置優化器模式,是 SQL 調優的基石。建議在資料庫建立階段即確立標準,避免混用模式導致效能不穩定。