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子句中包含其他列以使顺序具有​​确定性;

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

相关推荐
今晚务必早点睡4 小时前
微服务改数据库密码后服务仍能访问?一次“看似异常、实则常见”的生产现象全解析
数据库·微服务·oracle
老师我太想进步了20266 小时前
cmd连接MySQL及相关查询
数据库·mysql
難釋懷8 小时前
Redis命令-Set命令
数据库·redis·缓存
Linux-palpitate9 小时前
PostgreSQL(PG)的1主2从集群部署安装
数据库·postgresql
heartbeat..9 小时前
数据库基础知识体系:概念、约束、范式与国产产品
java·数据库·学习笔记·国产数据库
山峰哥10 小时前
数据库工程核心:SQL调优让查询效率飙升的实战密码
网络·汇编·数据库·sql·编辑器
Coder_Boy_10 小时前
基于SpringAI的在线考试系统-DDD业务领域模块设计思路
java·数据库·人工智能·spring boot·ddd
小雪_Snow11 小时前
Windows 安装 MySQL 8.0 教程【安装包方式】
数据库·mysql
无敌的牛11 小时前
MySQL初阶
数据库·mysql
不会C++的雾12 小时前
Linux操作系统(2)
linux·数据库·mysql