基於代價的優化器(CBO)在進行全表掃描時偶爾會作出一些錯誤的選擇,這種情況尤其發生在Oracle7和Oracle8之中。有幾種情況會導致這個問題,分別如下所示:最高使用標記(High water mark)太高:當要在一個表中進行大量的刪除時,最高使用標記可能會遠遠高於實際用到的數據塊(block)數量。因此,如果依賴於最高使用標記,CBO常常會錯誤的調用全表掃描。
錯誤的優化模式:如果OPTIMIZER_MODE被設置為ALL_ROWS或者CHOOSE,那麼SQL優化器會更樂於使用全表掃描。如果想進行快速的OLTP優化,必須首先確認已經將OPTIMIZER_MODE設置成FIRST_ROWS。
貧乏的統計:如果表已經顯著的增長,並且沒有被重新分析以更新統計數據,那麼也許會錯誤的進行全表掃描,因為CBO認為表長還是像未增長之前那麼小。
偏斜的索引:如果一個查詢中的候選索引存在偏斜值,那麼CBO也許會錯誤的選擇全表掃描。例如,考慮一個查找所有滿足條件REGION=SOUTHERN的記錄的查詢。在Region欄中已經有了一個索引,但是只有1%的條目是Southern region的。在缺少列的柱狀圖的情況下,CBO不知道Southern region有更高的命中率,所以它會選擇全表掃描。