MySQL 使用 order by 某个字段 limit offset 分页排序可能会导致数据丢失和重复

发布时间:2023年12月22日

问题

最近在项目中遇到一个很神奇的问题,MySQL 使用 order by 进行排序并进行分页的时候,会出现部分数据丢失和重复。具体看下面这三张图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中,

第一张图查询所有数据,并按 sort 字段排序,
第二张图,查询从第 1 条数据开始,查询 10 条数据,并按 sort 字段排序,
第三张图,查询从第 11 条数据开始,查询 10 条数据,并按 sort 字段排序,
仔细看我用红色标记出来的,可以发现,分类11 的数据在分页后查询不出来,而分类18 则出现了两次。很明显的发现,当进行数据分页时,部分数据出现了丢失和重复。

分析原因

在 MySQL 关系型数据库中,往往会存在多种排序算法。通过 MySQL 的源码和官方文档介绍可以得知,它的排序规律可以总结如下:

  • 当 order by 不使用索引进行排序时,将使用排序算法进行排序;
  • 若排序内容能全部放入内存,则仅在内存中使
文章来源:https://blog.csdn.net/uniquewonderq/article/details/135147316
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。