mysql扫描全表更新状态部分失败
作者:互联网
1. mysql排序问题
一直以为mysql是按照主键排序的,实则排序和主键没有关系(不使用 order by 子句)。
然后从 stackoverflow 上查了一下,找到了以下的回答:
没有默认的排序顺序。即使表具有聚集索引,也不能保证按该顺序获得结果。如果需要特定的顺序,则必须使用ORDER BY子句。
2. 线上问题
2.1 场景回顾
定时任务查询A表数据(8万多),每次查询500条,根据业务更新B表数据(15万),同样每次查询500条数据然后更新,大概就这样的业务。
2.2 问题发现
定时任务结束后,发现B表数据部分更新,执行3遍定时任务数据才会全部更新完。
2.3 排查问题
- 首先想到就是定时任务没有将B表数据全部查询出来,然后计算执行多少次算下来确实是15万。这个方向错了。
- 在数据库造点数据,添加日志将每次查询出的数据打印出来(5条),循环5遍发现B表全部更新,这时直接想不到还有什么因素引起的。
最后抱着试一试的心态,查询时候添加order by子句 ,第二天去生产环境看确实好了。
标签:子句,扫描,更新,查询,全表,mysql,排序,数据 来源: https://www.cnblogs.com/code-slave/p/16283024.html