1. 程式人生 > >MySQL索引失效

MySQL索引失效

net 默認值 != 可能 tails 分析工具 ans left 永遠

Google了很多“MySQL索引失效”的文章,寫的都很雜亂,於是自己綜合了幾篇文章,整理了一下。

參考資料:

https://www.jianshu.com/p/932bcdf2c89f

https://blog.csdn.net/u010796790/article/details/52194850


索引失效的場景:

  1. like 以%開頭,索引無效;當like前綴沒有%,後綴有%時,索引有效。

  2. or語句前後沒有同時使用索引。當or左右查詢字段只有一個是索引,該索引失效,只有當or左右查詢字段均為索引時,才會生效。

  3. 組合索引,不是使用第一列索引,索引失效。

  4. 數據類型出現隱式轉化。如varchar不加單引號的話可能會自動轉換為int型,使索引無效,產生全表掃描。

  5. 在索引列上使用 IS NULL 或 IS NOT NULL操作。索引是不索引空值的,所以這樣的操作不能使用索引,可以用其他的辦法處理,例如:數字類型,判斷大於0,字符串類型設置一個默認值,判斷是否等於默認值即可。

  6. 在索引字段上使用not,<>,!=。不等於操作符是永遠不會用到索引的,因此對它的處理只會產生全表掃描。 優化方法: key<>0 改為 key>0 or key<0。

  7. 對索引字段進行計算操作。

  8. 在索引字段上使用函數。

  9. 當全表掃描速度比索引速度快時,mysql會使用全表掃描,此時索引失效。

索引失效分析工具:

可以使用explain命令加在要分析的sql語句前面,在執行結果中查看key這一列的值,如果為NULL,說明沒有使用索引。

explain命令的詳細用法,可以查看這篇文章:https://segmentfault.com/a/1190000008131735

MySQL索引失效