哪些情况会导致索引失效

索引并不是时时都会生效的,比如以下几种情况,将导致索引失效

-------------------------------

简单归纳,如下:

1--条件有or

2--联合索引【复合索引】不适用第一部分

3--like 以%开头

4--字符串不加引号

5--where条件有数学运算或函数

--------------------------------

详细如下:

  1. 如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)

  

哪些情况会导致索引失效_第1张图片

  注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

  2.对于多列索引,不是使用的第一部分,则不会使用索引

对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c)。 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。

    所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。

  3.like查询是以%开头

哪些情况会导致索引失效_第2张图片

4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

  

哪些情况会导致索引失效_第3张图片

 

5、where字句里对索引列有数学运算或者使用函数,则不使用索引

----------------------------

参考:

https://www.cnblogs.com/hongfei/archive/2012/10/20/2732589.html

https://blog.csdn.net/qq_35275233/article/details/87888809

 

 

你可能感兴趣的:(数据库,Java)