程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 為什麼基於代價的優化器做出錯誤選擇

為什麼基於代價的優化器做出錯誤選擇

編輯:Oracle數據庫基礎

基於代價的優化器(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有更高的命中率,所以它會選擇全表掃描。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved