索引失效問題

2021-04-26 22:02:59 字數 437 閱讀 4321

今天用子查詢時遇到了索引失效的問題,就把解決的過程和大家分享一下吧。。

先是用in語句

select  /*+ index ( table [index [index]...] ) */  欄位a tablea  where 欄位b in(...)

檢視執行計畫,發現沒有走索引。為什麼?在網上一檢視,一網友解釋是用in 時由於值不確定,所以不能走索引(in or 經常會使索引失效)。

改寫sql

select  /*+ index ( table [index [index]...] ) */  欄位a tablea ,tableb  where exists(...)

檢視執行計畫,發現還是沒有走索引。為什麼?再一檢視,發現原來我的where語句後有乙個trunc()函式,而在where後的列如何加了函式則索引會造成索引失效。。。。

問題找到了。。。

索引失效問題

1 最佳左字首原則 如果索引了多列,要遵守最左字首原則。指的是查詢要從索引的最左前列開始並且不跳過索引中的列。2 不在索引列上做任何操作 計算,函式,自動或者手動 型別裝換 會導致索引失效而導致全表掃瞄 3 儲存引擎不能使用索引中範圍條件右邊的列,範圍之後索引失效。between and 4 mys...

mysql in 索引 失效 in 索引失效的問題

簡單的in查詢 索引失效 步驟1 檢查建立索引沒有 order status 欄位為普通索引的tinyint型別 2 檢查是否使用了使索引失效的語句 3 explain檢視執行計畫 而 in 1 時會走索引 5 檢視是否關閉的全域性的索引 comment顯示disabled則表示關閉了索引 show...

in 索引失效的問題

先安利一篇博文mysql的or in union與索引優化 簡單的in查詢 索引失效 步驟1 檢查建立索引沒有 order status 欄位為普通索引的tinyint型別 2 檢查是否使用了使索引失效的語句 3 explain檢視執行計畫 而 in 1 時會走索引 5 檢視是否關閉的全域性的索引 ...