索引失效原因分類

2021-07-05 06:00:28 字數 696 閱讀 9168

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 在查詢條件上沒有使用引導列 ...