程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle不走索引的原因,oracle走索引

Oracle不走索引的原因,oracle走索引

編輯:Oracle教程

Oracle不走索引的原因,oracle走索引


Oracle數據庫操作中,為什麼有時一個表的某個字段明明有索引,當觀察一些語的執行計劃確不走索引呢?如何解決呢?本文我們主要就介紹這部分內容,接下來就讓我們一起來了解一下  .
    
    不走索引大體有以下幾個原因:
    
    你在Instance級別所用的是all_rows的方式
    
    你的表的統計信息(最可能的原因)
    
    你的表很小,上文提到過的,Oracle的優化器認為不值得走索引  .
    
    解決方法:
    
    可以修改init.ora中的OPTIMIZER_MODE這個參數,把它改為Rule或Choose,重起數據庫  .也可以使用4中所提的Hint  .
    
    不走索引的其它原因:
    
    1、建立組合索引,但查詢謂詞並未使用組合索引的第一列,此處有一個INDEX SKIP SCAN概念  .
    
    2、在包含有null值的table列上建立索引,當時使用select count(*) from table時不會使用索引  .
    
    3、在索引列上使用函數時不會使用索引,如果一定要使用索引只能建立函數索引  .
    
    4、當被索引的列進行隱式的類型轉換時不會使用索引  .如:select * from t where indexed_column = 5,而indexed_column列建立索引但類型是字符型,這時Oracle會產生隱式的類型轉換,轉換後的語句類似於select * from t where to_number(indexed_column) = 5,此時不走索引的情況類似於case3  .日期轉換也有類似問題,如: select * from t where trunc(date_col) = trunc(sysdate)其中date_col為索引列,這樣寫不會走索引,可改寫成select * from t where date_col >= trunc(sysdate) and date_col < trunc(sysdate+1),此查詢會走索引  .
    
    5、並不是所有情況使用索引都會加快查詢速度,full scan table 有時會更快,尤其是當查詢的數據量占整個表的比重較大時,因為full scan table采用的是多塊讀,當Oracle優化器沒有選擇使用索引時不要立即強制使用,要充分證明使用索引確實查詢更快時再使用強制索引  .
    
    6、<>
    
    7、like'%dd'百分號在前  .
    
    關於Oracle執行計劃不走索引的原因的相關知識的總結就介紹到這裡了,希望本次的介紹能夠對您有所收獲!

 

java企業級通用權限安全框架源碼 SpringMVC mybatis or hibernate+ehcache shiro druid bootstrap HTML5

 

【java框架源碼下載】

 

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