mysql同时使用order by排序和limit分页数据重复问题

目录

场景再现:

解决方案:

问题分析:

mysql官方描述:


场景再现:

最近排查数据时发现使用order by及limit分页时会出现不同页数数据重复问题及有的数据分页不会显示,但是按条件搜索就可以搜索出来。

解决方案:

排序中使用唯一值(例如主键id),保证每条数据不重复;

问题分析:

mysql官方描述:

如果多行在列中具有相同的值ORDER BY,服务器可以自由地以任何顺序返回这些行,并且可能会根据整体执行计划以不同的方式返回。换句话说,这些行的排序顺序相对于未排序的列是不确定的。

影响执行计划的一个因素是 LIMIT,因此ORDER BY 有和没有的查询LIMIT可能会以不同的顺序返回行。

也就是说如果我们order by 的字段值是一样的,那么每一次查询的数据返回可能的顺序是不同的。如果同limit一起使用,就可能出现分页数据重复的问题。

官方文档: MySQL :: MySQL 5.7 Reference Manual :: 8.2.1.17 LIMIT Query Optimization

由此可知,在同时使用order by及limit时尽量确保ORDER BY子句中包含其他列以使顺序具有​​确定性;

若按照时间排序,建议库中时间值精确到毫秒级别;

相关推荐
xcLeigh10 分钟前
KES运维自动化与脚本体系实战
运维·数据库·自动化·脚本·数据迁移·kes
万亿少女的梦16811 分钟前
基于Spring Boot的社区管理系统设计与实现
java·spring boot·mysql·vue·系统设计
大气的小蜜蜂21 分钟前
领域层的服务
java·前端·数据库
翔云12345637 分钟前
简单概括主库上 Executed_Gtid_Set 是什么时候更新的
数据库·mysql
要开心吖ZSH42 分钟前
Java事务与MySQL事务的关系及MVCC通俗解析
java·开发语言·mysql·mvcc
火星校尉1 小时前
一场数据基建与消费场景的跨界实验
java·前端·数据库·python·php
平安的平安1 小时前
从“云端排队“到“边缘上岗“:DolphinDB 云边协同如何重塑工业现场的实时智能
数据库
懒鸟一枚1 小时前
为什么 useradd -rs /bin/false service 创建的用户无法用 su 切换?
linux·服务器·数据库
爱喝热水的呀哈喽1 小时前
hypermesh两个网格参数解析
服务器·数据库·mysql
万亿少女的梦1681 小时前
基于Spring Boot的楚雄旅游景区门票售卖系统设计与实现
java·spring boot·mysql·vue·系统设计