mysql的坑——持续更新

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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值