1.mysql varchar char类型字段默认不去space比较
BUG:通过两个条件写入的数据存在重复的情况。今天测试复现bug时一直无法复现。在发散思考的时候想到是否是数据问题导致。经过实验确实印证了这个思考。感觉向真相迈进了一大步。
如下图:条件是his_id+pat_no,可以很直观的看到查出了3条数据,实际他们并不一致
请大家观察光标位置,在不同的字段中右测都加了不同长度的space,但是sql会认为他们是相同数据查出,如果是selectOne的情况则会报错。
原因呢,mysql官网已经给出解释了
按照方法3做了一次实验,解决了。但。。。。这种数据通过接口跑不进去
BUG还是没有复现,为啥呢。挠头半小时后没办法找研发要了源码,好像是没加同步锁,该接口场景可能存在多线程情况,,,好吧 1w匹羊驼飘过。
并发测试中。。。。
10秒后
果然特么出现了重复大佬,加锁后问题解决。
今天发现用“mybatis-generator-maven-plugin”生成的mybatis mapper.xml中都做了很好的trim操作。。。所以提醒大家原生代码中也要加入哦。。。
2.mysql索引失效
BUG:报表导出时间长
问题:报表sql条件未使用上索引。
检查步骤:
各条件是否加了索引 是
条件中是否存在计算等内置函数 否
关联表中的字段类型是否不一致 否
查询内容是否大于整体表的30% 是
原因:
由于时间有大量重复,导致查询内容大于整体表的30%导致未用索引。
避免索引失效sql需要做到关联条件的索引字段名称一致,类型一致,长度一致,避免使用内置函数,避免使用子查询,避免使用多对多的索引,避免使用不唯一的索引。
资料获取来源:
https://my.oschina.net/u/3861898/blog/4683322