这里只是一个提醒,之前这个概念记的挺熟的,但是真到写代码的时候还是出现了这个问题。
早上报慢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