為何在查詢中索引未被使用

pxbibm發表於2014-08-20

“為什麼索引沒有被使用”是一個涉及面較廣的問題。有很多種原因會導致索引沒有被使用。我們可以按照下面一些非常有用的檢查列表來檢查我們的索引。

排錯步驟
  快速檢查
  表上是否存在索引?
  索引是否應該被使用?
  索引本身的問題
  索引列或者索引的前置列是否在單表(non-join)查詢的 Where 條件中(predicate list)?
  索引列是否用在連線謂詞中(join predicates)?
  索引列在 IN 或者多個 OR 語句中?
  索引列是否被函式修改?
  隱式型別轉換(implicit type conversion)是什麼?
  是否在語義(semantically)上無法使用索引?
  錯誤型別的索引掃描?
  是否索引列為可空?
  NLS_SORT是否設定為二進位制(BINARY)?
  是否使用的是不可見索引(invisible indexes)?
  最佳化器和成本計算相關問題
  是否存在準確且合適的統計資訊(Statistics)?
  一個索引是否與其它的索引有相同的等級或者成本(cost)?
  索引的選擇度不高?
  在總體成本中,表掃描的成本佔大部分
  訪問空索引並不意味著比訪問有值的索引高效。
  引數設定
  其它問題
  是否使用了檢視/子查詢?
  是否存在遠端表(remote table)?
  是否使用並行執行(PX)?
  是否是包含了子查詢的Update語句?
  查詢是否使用了繫結變數?
  查詢是否引用了帶有延遲約束的列?
  索引提示(hint)不工作
  有用的 hints:

 


 



2014.08.20 09:21
share you knowledge with the world. 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12798004/viewspace-1254374/,如需轉載,請註明出處,否則將追究法律責任。

相關文章