项目中某个导出功能的结果数据出现了重复数据,而数据总条数是正确的。
经过分析代码发现,导出功能为了防止内存溢出,采用了分页查询写入Excel的方式,而查询sql中的排序字段假设为分数。当数据中出现分数相同的数据,且记录位置刚好卡在前后2页上时有概率出现数据重复,如分页条数为10条,第10条和第11条数据如下:
| 排序 | 分数 | 姓名 |
|---|---|---|
| 10 | 88 | 张三 |
| 11 | 88 | 王五 |
这样有可能查第1页的时候的最后一条数据为张三,查第2页时的第1条数据也是张三,导致最终的导出结果中张三出现了重复而王五数据丢失了。
这里为了保证排序结果稳定,在分页查询数据时,最好有唯一值(如这里加入学号)参与排序来确保排序结果的稳定性。