咱们都知道创建索引可以提升查询效率,那么是否是任何状况下都能提升呢,固然不是的的,下面咱们就来列举一些常见的索引失效的场景。
借用上一篇文章的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