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 值是不確定值無法 ...