在 Oracle 7/8 時代,基於成本的優化器(CBO)偶爾會錯誤選擇全表掃描而非索引存取。主要成因有四:
大量刪除操作不會降低 HWM,導致 CBO 認為資料區塊遠多於實際,傾向全表掃描。
OPTIMIZER_MODE = ALL_ROWS 或 CHOOSE 偏好全表掃描;OLTP 環境應設為 FIRST_ROWS。
表大幅增長後未重新收集統計資訊,CBO 依舊依據舊統計資訊估算基數,誤判表較小而選擇全表掃描。
查詢條件列存在極不均勻的值分佈(如某值僅佔 1%),若無直方圖,CBO 無法感知選擇率差異,可能錯選全表掃描。
針對上述情境,及時收集統計資訊、建立直方圖、調整優化模式,可有效避免 CBO 誤判。