MySQL 查询返回重复数据
异常场景
- 生产环境执行初始化功能,数据量很大,执行结果,出现部分数据初始化失败
异常分析
- 代码检查:分页查询表中数据
- SQL:
select a.id ,a.data from table a order by a.sort limit 0,1000
- 表面上没有任务问题,但是将表中数据按照主键放入Map中后的数量与通过SQL直接查询得到的数量不一致
异常定位
- order by limit 时存在数据重复1
- 原因在于 mysql 版本 大于 5.6的排序采用堆排序2
- 堆排序3是不稳定的排序算法,导致每次排序结果返回的数据不一致4
- 修改方案:排序时根据唯一的键值排序 by a.id 5