mysql索引失效的原因

  介绍

小编给大家分享一下mysql索引失效的原因,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!

索引对于mysql而言,是非常重要的篇章。索引知识点也巨多,要想掌握透彻,需要逐个知识点一一击破,今天来先来聊聊哪些情况下会导致索引失效。

图片总结版

 mysql索引失效的原因

<强>相关免费学习推荐: <强> mysql视频教程

全值匹配(索引最佳)

explain  select  *,得到user  where  name =, & # 39; zhangsan& # 39;,以及age =, 20,以及pos =, & # 39; cxy& # 39;,以及phone =, & # 39; 18730658760 & # 39;;

 mysql索引失效的原因

和索引顺序无关,mysql底层的优化器会进行优化,调整索引的顺序   explain  select  *,得到user  where  name =, & # 39; zhangsan& # 39;,以及age =, 20,以及pos =, & # 39; cxy& # 39;,以及phone =, & # 39; 18730658760 & # 39;;

 mysql索引失效的原因

1,违反最左前缀法则

如果索引有多列,要遵守最左前缀法则   即查询从索引的最左前列开始并且不跳过索引中的列   explain  select  *,得到user  where  age =, 20,以及phone =, & # 39; 18730658760 & # 39;,以及pos =, & # 39; cxy& # 39;;

 mysql索引失效的原因

2,在索引列上做任何操作

如计算,函数,(自动或手动)类型转换等操作,会导致索引失效从而全表扫描   explain  select  *,得到user  where 左(名称、5),=,& # 39;zhangsan& # 39;,以及age =, 20,以及phone =, & # 39; 18730658760 & # 39;;

 mysql索引失效的原因

3,索引范围条件右边的列

索引范围条件右边的索引列会失效   explain  select  *,得到user  where  name =, & # 39; zhangsan& # 39;,以及age 祝辞,20,以及pos =, & # 39; cxy& # 39;;

 mysql索引失效的原因

4,尽量使用覆盖索引

只访问索引查询(索引列和查询列一致),减少选择*   explain  select 姓名、年龄、pos phone 得到user  where  age =, 20;

 mysql索引失效的原因

5,使用不等于(!=& lt;祝辞)

mysql在使用不等于(!=& lt;祝辞)的时候无法使用索引会导致全表扫描(除覆盖索引外)   explain  select  *,得到user  where  age  !=, 20;   explain  select  *,得到user  where  age  & lt;祝辞,20;

 mysql索引失效的原因

 mysql索引失效的原因

6,像以通配符开头(& # 39;% abc # 39;)

索引失效   explain  select  *,得到user  where  name  like  & # 39; % zhangsan& # 39;;

 mysql索引失效的原因

索引生效   explain  select  *,得到user  where  name  like  & # 39; zhangsan % & # 39;;

 mysql索引失效的原因

7字符串不加单引号索引失效

explain  select  *,得到user  where  name =, 2000;

 mysql索引失效的原因

8,或连接

少用或   explain  select  *,得到user  where  name =, & # 39; 2000 & # 39;,趁机age =, 20,趁机pos =& # 39; cxy& # 39;;

mysql索引失效的原因