来源:互联网 更新时间:2026-08-13 07:25
最近在项目中遇到一个很神奇的问题,MySQL 使用 order by 进行排序并进行分页的时候,会出现部分数据丢失和重复。具体看下面这三张图



其中,
第一张图查询所有数据,并按 sort 字段排序,第二张图,查询从第 1 条数据开始,查询 10 条数据,并按 sort 字段排序,第三张图,查询从第 11 条数据开始,查询 10 条数据,并按 sort 字段排序,仔细看我用红色标记出来的,可以发现,分类11 的数据在分页后查询不出来,而分类18 则出现了两次。很明显的发现,当进行数据分页时,部分数据出现了丢失和重复。
在 MySQL 关系型数据库中,往往会存在多种排序算法。通过 MySQL 的源码和官方文档介绍可以得知,它的排序规律可以总结如下:
当 order by 不使用索引进行排序时,将使用排序算法进行排序;若排序内容能全部放入内存,则仅在内存中使用快速排序;若排序内容不能全部放入内存,则分批次将排好序的内容放入文件,然后将多个文件进行归并排序;若排序中包含 limit 语句,则使用堆排序优化排序过程。结合前面的结论,当 order by limit 分页出现数据丢失或重复时,先检查 order by 使用的 sort 字段是否命中索引。通常情况下,排序字段不会直接使用索引;如果能够使用索引,查询就会转为索引排序。
因此可以得出,上面的图二和图三的 SQL 语句使用了堆排序。因为 sort 字段没有索引,所以没走索引排序;并且使用了 limit。导致最终使用了堆排序。
如果了解算法的你,应该知道堆排序是不稳定的。这种不稳定性,指的就是多次排序后,各个数的相对位置发生了变化。
但这种情况并不适用于所有 MySQL 版本。自 MySQL 5.6 起,优化器在处理
通过上面的分析,有两种解决方案可以解决此问题。
方案一:降低 MySQL 版本为 5.5 或更低版本。此方案不推荐,数据库版本一般是指定的,降低数据库版本工作量较大。方案二:在 order by 排序字段里,添加有索引的字段,比如主键ID。这样在排序时可以保证顺序稳定。在图二、图三中,增加主键 category_id 字段排序后,就不会出现数据丢失和重复了。


如果查询数据进行排序和分页时,如果排序字段没有使用索引,一定要添加一个有索引的字段,比如主键 ID,保证顺序稳定。否则,查询的数据会导致数据丢失和重复。
理解此问题出现的原因后,赶紧去看看你的项目中有没有这种情况吧!要不然出问题就不好办了!
最后,附上新建表和表相关数据的 SQL 语句:
DROP TABLE IF EXISTS `sys_category`;CREATE TABLE `sys_category` (`category_id` bigint NOT NULL AUTO_INCREMENT,`category_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '分类名称',`sort` int DEFAULT NULL COMMENT '分类排序',PRIMARY KEY (`category_id`)) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;INSERT INTO `sys_category` VALUES (1,'分类1',1),(2,'分类2',2),(3,'分类3',20),(4,'分类4',21),(5,'分类5',22),(6,'分类6',23),(7,'分类7',0),(8,'分类8',0),(9,'分类9',0),(10,'分类10',0),(11,'分类11',0),(12,'分类12',0),(13,'分类13',0),(14,'分类14',0),(15,'分类15',0),(16,'分类16',0),(17,'分类17',0),(18,'分类18',0); 从根上理解order by limit分页数据重复问题
MySQL 5.6之后 order by limit 排序分页数据重复问题
黄金价格不断创新高!黄金稳定币XAU、PAXG市值达11亿美元
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
CC币价格预测(2026-2035):Canton币今日价格走势+长期价格预测
新浪互联网热点小时报丨2026年07月26日16时_今日实时互联网热点速递
腾讯ima怎么创建共享知识库?
今日比特币暴涨分析:Metaplanet的比特币BTC投资推动股价上涨17%
腾讯ima怎么把微信内容一键导入知识库?
蚂蚁庄园今日答案7月21日(今日已更新) 蚂蚁庄园今天正确答案是什么呢
2026热门直线加速赛车手游推荐:高人气、爽快加速体验的精品榜单
Intel喜讯连连:18A工艺良率提升到85%、CPU将涨价15%
Windy卫星云图怎么看?云层变化识别技巧
kimi提示词专家使用方法新手指南
新浪人工智能热点小时报丨2026年07月30日18时_今日实时人工智能热点速递
原神霜月三处月灵龛具体位置汇总
《幻兽帕鲁》不触发通缉捕捉传说商人方法
短剧《史上最强洪荒修为》剧情介绍
9条破亿视频,新号涨粉百万,过去半年谁在制造AI爆款?
为什么推特KOL都在BRC20赚钱 我一冲就亏?
抖音怎么取消申请退货退款?抖音上取消退货怎么操作
炼金工房新作或能吃成“良子” 想让女主越吃越丰满
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc