Oracle不走索引的原因

2022-03-12 09:18:20 字數 1177 閱讀 6755

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執行計畫不走索引的原因的相關知識的總結就介紹到這裡了,希望本次的介紹能夠對您有所收穫!

Oracle不走索引的原因

在oracle資料庫操作中,為什麼有時乙個表的某個字段明明有索引,當觀察一些語的執行計畫確不走索引呢?如何解決呢?本文我們主要就介紹這部分內容,接下來就讓我們一起來了解一下 不走索引大體有以下幾個原因 你在instance級別所用的是all rows的方式 你的表的統計資訊 最可能的原因 你的表很小...

Oracle不走索引的原因

oracle資料庫操作中,為什麼有時乙個表的某個字段明明有索引,當觀察一些語的執行計畫確不走索引呢?如何解決呢?本文我們主要就介紹這部分內容,接下來就讓我們一起來了解一下 不走索引大體有以下幾個原因 你在instance級別所用的是all rows的方式 你的表的統計資訊 最可能的原因 你的表很小,...

不走索引的原因

補充 不走索引的原因,甚至加上hint 還不走索引,那可能是因為你要走索引的這列是nullable,雖然這列沒有空值。將字段改為not null 備註 不走索引的其它原因1 建立組合索引,但查詢謂詞並未使用組合索引的第一列,此處有乙個index skip scan概念。2 在包含有null值的tab...