索引失效的幾種情況

2021-10-10 20:44:02 字數 1156 閱讀 7844

1.有or必全有索引;

2.復合索引未用左列字段;

3.like以%開頭;

4.需要型別轉換;

5.where中索引列有運算;

6.where中索引列使用了函式(not in 或 not exists);

7.如果mysql覺得全表掃瞄更快時(資料少);

1.唯一性差;

2.頻繁更新的字段不用(更新索引消耗);

3.where中不用的字段;

4.索引使用<>時,效果一般;

索引並不是時時都會生效的,比如以下幾種情況,將導致索引失效:

注意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引

比如資料量極少的表

1) 資料唯一性差(乙個欄位的取值只有幾種時)的字段不要使用索引

比如性別,只有兩種可能資料。意味著索引的二叉樹級別少,多是平級。這樣的二叉樹查詢無異於全表掃瞄。

2) 頻繁更新的字段不要使用索引

比如logincount登入次數,頻繁變化導致索引也頻繁變化,增大資料庫工作量,降低效率。

3) 欄位不在where語句出現時不要新增索引,如果where後含is null /is not null/ like 『%輸入符%』等條件,不建議使用索引

只有在where語句出現,mysql才會去使用索引

4) where 子句裡對索引列使用不等於(<>),使用索引效果一般

索引失效的幾種情況

使用explain sql 可檢視mysql執行計畫 type為掃瞄型別,key為使用索引型別 1.使用了or 除非or的列都加上了索引 2.聯合索引 未符合索引字段順序 3.like查詢 使用前 不走索引 4.字元型不加引號 資料庫自動轉換成數值型 資料型別不統一 不走索引 5.sql中使用函式,...

MySQL索引失效的幾種情況

更準確的說,單列索引不儲存null值,復合索引不儲存全為null的值。索引不能儲存null,所以對這列採用is null條件時,因為索引上根本 沒null值,不能利用到索引,只能全表掃瞄。為什麼索引列不能存null值?將索引列值進行建樹,其中必然涉及到諸多的比較操作。null值的特殊性就在於參與的運...

MySQL索引失效的幾種情況

a.單列索引無法儲null值,復合索引無法儲全為null的值。b.查詢時,採用is null條件時,不能利用到索引,只能全表掃瞄。為什麼索引列無法儲存null值?a.索引是有序的。null值進入索引時,無法確定其應該放在 將索引列值進行建樹,其中必然涉及到諸多的比較操作,null 值是不確定值無法 ...