You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot分页查询MySQL用户数据出现条目跳过与重复问题

故障原因
  • 核心问题为排序规则不稳定、不唯一:当前仅使用布尔类型的isBoard作为唯一排序字段,该字段只有true和false两种取值,大量用户的isBoard字段值完全一致。MySQL对于排序值相同的行不会固定返回顺序,在数据量较大、存在数据增删或者缓存刷新的场景下,每次分页查询时同分组内的行返回顺序可能随机变化,导致分页偏移量计算出现错位,最终出现数据重复、部分用户被遗漏的问题。
修复方案
  • 补充唯一排序维度,保证排序规则全局固定:在isBoard字段排序之后,新增第二个排序字段,可选择全局唯一、值不会变更的自增主键id,确保相同isBoard取值的用户排序顺序永远固定,不会出现分页错位。
    修改分页构造代码如下:
// 原逻辑仅按isBoard排序,修改为按isBoard降序+id升序双维度排序
Pageable pageable = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "isBoard").and(Sort.by(Sort.Direction.ASC, "id")));
  • (可选优化)如果后续数据量增长到百万级以上,可以将偏移分页替换为游标分页,每次查询携带上一页最后一条数据的isBoard值和id作为过滤条件,避免大偏移量查询带来的性能损耗,进一步提升分页稳定性。

内容的提问来源于stack exchange,提问作者Kousayla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:39:03