前提:索引是建立好並且沒有失效的
1.sql層面
1.1)not in, not exist,會導致索引失效
1.2)like '%_' 百分號在前面,會導致索引失效
1.3)對索引列進行運算操作,會導致索引失效
eq:select t.*,t.rowid from tf_b_paylog t where t.acct_id-1=100
1.4)隱式轉換會導致索引失效(重點)
表字段定義為varchar型別,但在查詢時把該字段作為number型別以where條件傳給oracle。
1.5)對索引使用內部函式回導致索引失效
解決方案:建立函式索引
2.表層面
2.1)對小表進行查詢
2.2)建立的索引必須是變換量大
2.3)沒有進行表分析
3.組合(復合)索引
使用復合索引的時候,按照最左優先原則
eq:乙個表中有a、b、c三個字段組合的復合索引,按照a、ab、ac、abc去查詢都會走索引,如果按照其他組合形式的索引去查詢,並不會走索引。
索引失效原因總結
今天乙個同事突然問我索引為什麼失效。說實在的,失效的原因有多種 但是如果是同樣的sql如果在之前能夠使用到索引,那麼現在使用不到索引,以下幾種主要情況 1.隨著表的增長,where條件出來的資料太多,大於15 使得索引失效 會導致cbo計算走索引花費大於走全表 2.統計資訊失效 需要重新蒐集統計資訊...
索引失效原因總結
今天乙個同事突然問我索引為什麼失效。說實在的,失效的原因有多種 但是如果是同樣的sql如果在之前能夠使用到索引,那麼現在使用不到索引,以下幾種主要情況 1.隨著表的增長,where條件出來的資料太多,大於15 使得索引失效 會導致cbo計算走索引花費大於走全表 2.統計資訊失效 需要重新蒐集統計資訊...
索引失效原因總結
1.隨著表的增長,where條件出來的資料太多,大於15 使得索引失效 會導致cbo計算走索引花費大於走全表 2.統計資訊失效 需要重新蒐集統計資訊 3.索引本身失效 需要重建索引 下面是一些不會使用到索引的原因 索引失效 1 沒有查詢條件,或者查詢條件沒有建立索引 2 在查詢條件上沒有使用引導列 ...