1、
沒有查詢條件,或者查詢條件沒有建立索引 2、
在查詢條件上沒有使用復合索引引導列
3、查詢的資料量超過了表資料量的15%
4、索引本身失效(status=unusable)
5、查詢條件使用函式在索引列上
6、對小表查詢
7、使用hint提示不使用索引
8、統計資訊不真實
9、cbo認為走全表掃瞄比走索引代價小
10、隱式轉換導致索引失效
由於表的字段是varchar2型別,但在查詢時把該字段作為number型別以where條件傳給oracle,這樣會導致索引失效。
錯誤的例子:select * from t2 where id=112
正確的例子:select * from t2 where id='112'
11、對索引列運算導致索引失效
這裡的運算包括(+ - * / <> != )
12、使用oracle內部函式導致索引失效,對於這種情況,應該建立函式索引
13、模糊查詢%在前
錯誤的例子:select * from t4 where name like '%aaa%'
正確的例子:select * from t4 where name like 'aaa%'
14、查詢條件中or
注意:要想使用or,又想讓索引生效,只能將or條件中的每個列加上索引
like索引失效原因 索引失效的情況及原因定位
同事遇到乙個奇葩的問題,乙個表裡某個欄位建了索引,但是有的值走索引,有的值不走索引。因為一般情況乙個字段要麼完全不走索引,要麼走索引,怎麼會有的值走索引,有的不走索引。select 條件非常簡單,因為涉及到敏感資訊就不貼表結構了。例如select from order where status 2 ...
索引失效原因總結
今天乙個同事突然問我索引為什麼失效。說實在的,失效的原因有多種 但是如果是同樣的sql如果在之前能夠使用到索引,那麼現在使用不到索引,以下幾種主要情況 1.隨著表的增長,where條件出來的資料太多,大於15 使得索引失效 會導致cbo計算走索引花費大於走全表 2.統計資訊失效 需要重新蒐集統計資訊...
mysql 索引失效原因
1.隨著表的增長,where條件出來的資料太多,大於15 使得索引失效 會導致cbo計算走索引花費大於走全表 2.統計資訊失效 需要重新蒐集統計資訊 3.索引本身失效 需要重建索引 下面是一些不會使用到索引的原因 索引失效 1 沒有查詢條件,或者查詢條件沒有建立索引 2 在查詢條件上沒有使用引導列 ...