案例12-数据类型不一致导致索引失效
创始人
2025-05-28 18:21:12

目录

一:背景介绍

二:思路&方案

三:过程

验证数据类型转换的sql语句查看索引是否生效

1.表中的索引

 2.表中字段的数据类型

3.执行sql语句

验证数据类型没有转换的sql语句查看索引是否生效

1.将sql语句中的值改为字符类型

四:总结

 索引失效的6种情况

1.在索引类上做操作,比如类型转换,函数

2.通配符开头

3.WHERE 子句中的 OR

4.组合索引,不符合最左匹配原则

五:升华

一:背景介绍

        在开发的过程中在编写查询语句的时候经常会用到is_delete=0的语句条件,但是我们在设计表的时候会把is_delete字段的类型设置为varchar。这就导致我们在执行有is_delete=0的sql语句的时候索引会失效。因为sql有一个优化器他会把数值类型的0转换成字符类型的0。数据类型转换会导致索引的失效。

二:思路&方案

        1.mysql三大数据类型,分为数值类型、时间日期类型和字符类型。

        2.验证数据类型转换的sql语句查看索引是否生效

        3.验证数据类型没有转换的sql语句查看索引是否生效

三:过程

验证数据类型转换的sql语句查看索引是否生效

1.表中的索引

        

 2.表中字段的数据类型

3.执行sql语句

        type中的ALL代表全表查询,用结果上来看我们添加的索引是没有生效的。因为我们在执行sql语句的时候is_delete赋的值是数值类型,但是数据库中是字符类型。所以进行了类型的转换。导致索引是没有生效的。 

验证数据类型没有转换的sql语句查看索引是否生效

1.将sql语句中的值改为字符类型

        type中从ALL转换成了ref。索引生效了

四:总结

 索引失效的6种情况

1.在索引类上做操作,比如类型转换,函数

2.通配符开头

 

3.WHERE 子句中的 OR

如果where 子句里 or前的列是索引列,or后面的条件列不是索引列,索引就会失效。

4.组合索引,不符合最左匹配原则

假设我们对字段 a,b 建立了一个组合索引(a,b)。
如果我们的查询是以下几种,则会正常走联合索引:

where a = 1;
where a = 2 and b = 2;
如果是如下几种则不会走组合索引:

where b = 2;
where b = 2 and a = 3;
通过对比我们可以看出,索引的生效是遵循最左匹配原则的。在使用的时候,必须从最左侧的索引开始。
 

五:升华

        只有我们明确了什么情况下索引会失效,我们再添加索引和使用索引的时候才会生效。才不会导致我们添加了索引占用了资源还没有生效的情况。明确概念明确边界。 

相关内容

热门资讯

12岁女孩被虐待致死案新进展:... 新京报记者 赵露 制作 礼牧周 ▲新京报我们视频出品(ID:wevideo) 12月17日,记者从被...
2025年阿坝全州接待游客预计... 12月17日,阿坝州“全域旅游示范引领专场”发布会在汶川县举行,州文广旅局党组成员、副局长张艳介绍2...
工商变更!余承东出任华为终端公... 据国家企业信用信息公示系统显示,12月12日,华为终端有限公司发生工商变更,郭平卸任董事长,由余承东...