MySQL索引失效的幾種場景

 咱們都知道創建索引可以提升查詢效率,那麼是否是任何狀況下都能提升呢,固然不是的的,下面咱們就來列舉一些常見的索引失效的場景。

借用上一篇文章的dm_person_info表

在card_code列沒加索引的時,查詢時間以下,大概都在0.07秒。sql


 咱們來加上索引試試,加上後查詢效率高了許多。函數



 在正確使用索引的狀況下,查詢一行數據的時間不到10毫秒,因此顯示0.00 sec .

1.列類型是字符串,查詢條件未加引號。

card_code列是身份證號,數據類型是varchar,在沒有將證件號碼用引號括起時不會使用索引,此時索引失效。.net


 2.未使用該列做爲查詢條件

索引建在card_code列上,使用tel列做爲查詢條件,此時該索引未被使用到,也能夠說是失效的。code


3.使用like時通配符在前

咱們能夠看到通配符在後面時效率不受影響,說明此時索引未失效,通配符在前時索引失效。

4. 在查詢條件中使用OR

查詢條件中使用or會使索引失效,要想是索引生效,須要將or中的每一個列都加上索引。

5.對索引列進行函數運算

 6.聯合索引ABC問題

Mysql從左到右的使用索引中的字段,一個查詢能夠只使用索引中的一部份,但只能是最左側部分。例如索引是index (a,b,c),能夠支持a | a,b| a,b,c 3種組合進行查找,但不支持 b,c或c進行查找 。

這裏只介紹6種比較常見的失效場景,實際上還有不少,咱們在實際開發中要注意到這些問題,不能掉到坑裏去了,哈哈^_^  。

原文:https://blog.csdn.net/dwl0208/article/details/83448520

blog

相關文章
相關標籤/搜索