案例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;
通过对比我们可以看出,索引的生效是遵循最左匹配原则的。在使用的时候,必须从最左侧的索引开始。
 

五:升华

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

相关内容

热门资讯

南部战区新闻发言人就荷兰军舰侵... 南部战区新闻发言人翟士臣海军大校表示,5月27日,荷兰海军“德鲁伊特”号护卫舰非法侵闯中国西沙群岛,...
百大集团:股东西子联合拟减持不... 3月19日消息,百大集团(600865.SH)公告称,持股5%以上股东西子联合控股有限公司因资金需求...
*ST万方:股票或因多项情形被... 3月19日消息,*ST万方公告称,公司股票于2025年4月30日起被实施退市风险警示。2026年3月...
新疆新能源外送电量突破3000... 3月19日消息,新疆电力交易中心有限公司最新数据显示,截至18日,风光资源富集的新疆自2010年实施...
现货黄金日内跌幅扩大至2%,报... 3月19日消息,现货黄金日内跌幅扩大至2%,报4716.11美元/盎司。(科股宝播报)