Mysql字符串类型数据查询不加引号的问题

今天我们的结算系统有个界面变慢了,慢到已经超过了Nginx最大响应时间了(其实之前就已经很慢,可能数据库里的数据没现在这么多,访问不成问题,所以我也没在乎),今天我只好仔细研究了一下。

最终定位到了原因:从我们公司的支付网关查询到的流水号是整数,但是我们自己数据库的支付表中流水号的字段是varchar,当我发起查询的时候,直接使用了网关返回的整数,而这导致了索引失效,查询变得异常慢。

具体看下面的示意图:

图一没有使用上索引,而是全表扫描;图二使用了索引。

直接使用整数查询的时候是全表扫描。

之所以会产生这样的原因是因为:where的值是整数,但该字段是字符串类型的。它会将数据表里的所有该字段的值都转换为整数,然后再取匹配where条件里面的值。

发现了原因,我这边就比较好改了,直接将得到的数组map一遍,callback函数就是将每个元素都转变为字符串,然后再去查询,就使用了索引。

--------EOF---------
本文微信分享/扫码阅读