MySQL字段类型不同造成的隐式转换,导致索引失效

这里只是一个提醒,之前这个概念记的挺熟的,但是真到写代码的时候还是出现了这个问题。

早上报慢SQL查询报警,然后看了看SQL语句(语句被我简化了很多):

SELECT  xxx  FROM t_alipay_xxx  WHERE order_no in (15481284322554)                                              and status in (2,3)

记得order_no是加了索引才对的啊,当时同事提醒这个是因为order_no用的数字,我们的数据库结构order_no用的是varchar类型的,要加上引号('')

SELECT  xxx  FROM t_alipay_xxx  WHERE order_no in ('15481284322554')                                              and status in (2,3)

加上引号之后,果然走了索引, 遇到情况之后印象才更深刻啊。之所以用in,先用stringBuilder连接了字符串,在mybatis中使用$$,没有转义,最后执行的真正SQL都变成了没有引号的。


image.png

另外

image
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容