mysql 排序后 分页 第一页数据和第二页数据部分数据重复问题

Mysql排序后分页 分页数据有重复 MySQL 使用 limit 进行分页时,可能会出现重复数据,通过加入 order by 子句可以解决,但是需要注意的是,如果排序字段有相同值的情况下,由于排序字段数据重复,可能会导致每次查询排序后结果顺序不同,分页还是会出现重复数据,这时可以加入第二个排序字段,提高排序的唯一性,最好保证排序的字段在表中的值是唯一的,这样就可以少写一个排序字段,增加查询效率,因为 order by 后面有多个排序字段时,无法用到索引。 阅读详情

记录开发过程中的一个坑 在开发过程中遇到的问题 (菜鸡一枚,随笔勿喷)

问题描述
数据分页时需要根据数据记录创建时间create_time字段倒序,即使用order by create_time desc limit ?,?,但是我们会发现,前端进行请求时获取的数据并不正确,分页中出现了一定的重复数据。

问题原因
期初还很好奇,总数没问题,总查询也没问题,为什么数据会重复了,然后会把部分数据给覆盖了。后来,通过查看SQL发现,是根据时间进行排序的,然而 这个时间 恰恰 好多数据都是 同一时间插入,或者 设置的 同一时间。

先后执行 总查询(也就是不分页),是没有重复。

再次执行分页查询,分两页查询就有了出路。(且,两次查询出来的数据和总查询数据不一样了)

后来 发现,当SQL中ORDER BY待排序字段值相同时,系统对数据的排序可能变得随机,即一会儿这条数据在前面,一会儿这条数据在后面了 ,所以当翻页的时候我们很容易便看到了重复的数据。

SQL中ORDER BY相同值结果乱序的具体原因
查阅了Goole和相关资料,大概总结了这种情况的原因。其实发生这种现象是“故意”设计的。

如果没有指定ORDER BY语句,则 MySQL (或任何RDBMS)不保证以特定顺序返回结果。 有些人认为,如果没有指定order by子句,行总是以聚簇索引顺序或物理磁盘顺序返回。 然而,这是不正确的,因为在查询处理期间可以改变行顺序的许多因素,例如并行的HASH连接是更改行顺序的操作符的一个很好的例子。

如果指定ORDER BY语句,MySQL将对行进行排序,并按请求的顺序返回。 但是,如果该顺序不是确定性的,即可能有重复的值,则在每个具有相同值的组中,由于与上述相同的原因,该顺序是“随机的”。

确保确定性顺序的唯一方法是在ORDER BY子句中包含保证的唯一列或列组(例如主键)。

select member_id,create_time from member order by create_time desc,member_id;
1
总结
为了避免类似的问题,我们可以将主键(或者具有唯一性的字段)排序引入需要排序的业务字段后即可解决 。
————————————————
版权声明:本文为优快云博主「一叶知秋_dba」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_43726822/article/details/90316793

【Mysql】分页排序查询(Order by limit)出现数据丢失和重复 如果必须执行文件排序,则在找到第一个row_count之前,将选择所有与查询匹配的,没有LIMIT子句的行,并对其中的大多数或全部进行排序。在执行查询时,MySQL会根据查询优化器的决策来确定数据的检索顺序,如果没有明确的排序规则,结果集的顺序可能会随机,也就是说当我们用更新时间来做排序,而更新时间这个字段的值是不唯一的,同一个更新时间的数据有多条,那么在分页查询时,就可能会在不同页排序后取到相同的数据。出现的问题就是第二页的最后一条数据,和第三页的第一条数据是一样的,也就是出现了分页数据重复的问题。 阅读详情

相关推荐

Mybatis MySQL数据库分页查询出现重复数据

MySQL分页查询出现重复数据 情景(situation):   今天在生产环境,业务同事导出文件时遇到了出现重复数据的问题。因为之前这个功能是我和我带的外包同事一起做的,所以很熟悉这块代码。经过线上操作核对,和代码检测,发现线上查询确实出现了重复数据,而导出文件出现重复数据是因为导出功能后面使用的接口是我提供的分页接口。通过代码分析,基本确认后台应用端代码应该是没有问题的,那么问题就出现在我提供...

朱政雄的博客 3799

分页数据重复问题及解决方法

今天测试给我提了一个bug,说第二页的数据和第一页的数据有重复,于是我开始检查是不是sql写的有问题,检查后发现sql是ok的,如果不加分页数据不会重复,加了分页之后就发生重复了 原因:排序的字段是采用了更新时间排序,但是业务数据是批量插入的,所以业务数据的更新时间完全一样,导致排序失效,进而引发了重复数据的bug 解决方法: 方法1: 先用更新时间排序,再按id排序,就可以解决重复的问题 方法2:加一个排序字段,然后按照这个排序字段排序 ...

hgq0916的博客 2069

mysql 分页查询出现重复数据分析排查

mysql 分页查询出现重复数据问题排查mysql 分页查询出现重复数据问题分析定位问题解决方案 mysql 分页查询出现重复数据 2019的最后一天,才发现今年快过去了,就想着写点东西纪念一下,而且正好昨天项目上遇见一个让我感到很奇怪的问题,一个简单的分页查询居然出现问题了,让人难以置信啊,但是问题就是出现了。所以现在就将我对这件事的问题排查过程做一个简单的记录。希望能帮助到大家。顺便方便自己做...

逍遥散人的博客 2485

mysql 排序后 分页 第一页数据和第二页数据部分数据重复问题

记录开发过程中的一个坑 在开发过程中遇到的问题 (菜鸡一枚,随笔勿喷) 问题描述 数据分页时需要根据数据记录创建时间create_time字段倒序,即使用order by create_time desc limit ?,?,但是我们会发现,前端进行请求时获取的数据并不正确,分页中出现了一定的重复数据。 问题原因 期初还很好奇,总数没问题,总查询也没问题,为什么数据会重复了,然后会把部分数据给覆...

weixin_43726822的博客 4596

MySQL分页排序中的坑

今天项目提测,被测出了一个奇怪的bug,第一页最后一条数据和第二页的第一条数据重复了,并且神奇的丢失了一个条数据,下面开始来分析一下这个场景。 第一页 第二页 场景为对一些作业进行按时间排序,但是有的作业时间是相同的。 对代码进行查看发现,代码并没有什么问题,只是简单的查询全集并按时间排序分页返回给前端。 所以去看一看mysql对limit的解释,从官方文档中发现了这样一句话...

ANGEL CITY 2万+

告别混乱!在Unity中为Best MQTT v3设计清晰的服务层:配置、连接、订阅发布模块拆分指南

本文详细介绍了如何在Unity中使用Best MQTT v3插件构建清晰的服务层架构,包括配置管理、连接服务、订阅管理和发布服务的模块化拆分。通过解耦设计、事件驱动和接口抽象,提升代码可维护性和可测试性,适用于物联网和实时通信开发场景。

weixin_30576827的博客 357

排序后分页第一页数据和第二页数据重复问题

分页、排序、排序问题、排序重复、分页排序混乱、JdGrid排序

weixin_71588037的博客 1110

西电2023秋季机器学习复习提纲

西电2023秋季机器学习复习提纲,希望对学弟学妹有帮助

weixin_62083045的博客 5635

关于MySQL排序分页之后,前后页有部分数据重复问题

经查,是由于api接口返回的数据导致,在转盘五连抽时,产出的步数是批量插入数据库的,领取时间字段的值是一致的, 按照领取时间分页查询时偶尔就出现重复记录。MySQL 在分页排序时,如果排序的字段的值全部相同,那么MySQL会将数据随机排序分页,所以前后页会有部分数据重复。在排序分页时,需保证排序字段的唯一性,如使用主键、唯一索引、不重复的普通字段、多级排序。增加一个二级排序字段,当领取时间相同时,则按照id字段进行排序。在做一个游戏活动中遇到的一个问题,记录一下。...

刘城的博客 2873

MT4-EA自动化交易研究笔记(2022-04-22)

自从接触到mt4的EA自动化交易,更让我这个10多年的老程序员看到了曙光,目前来看也确实出了一点成果,只是是否能稳定盈利有待时间的考验,所以开此专栏,一来做做记录与分析,更好的优化我的EA,二来也希望能与更多的高手交流,以完善我的交易系统

t35254056的博客 2291

树莓派驱动DLPDLCR230NPEVM+framebuffer显示图片

DLPDLCR230NPEVM DLP® LightCrafter™ Display 230NP 是一个易于使用的紧凑型即插即用评估平台,适用于消费类产品、工业、医疗和物联网 (IoT) 市场中的各种超便携显示应用。此评估模块 (EVM) 采用 DLP230NP 芯片组,该芯片组由DLP230NP.23 1080p DMD、DLPC3436显示控制器和DLPA2005PMIC/LED 驱动器组成。此 EVM 外形小巧,配备生产就绪型光学引擎以及支持 18 位 RGB 并行视频接口...

L_Y000的博客 2618

mysql查看第二页_mysql 排序后 分页 第一页数据和第二页数据部分数据重复问题...

记录开发过程中的一个坑 在开发过程中遇到的问题 (菜鸡一枚,随笔勿喷)问题描述数据分页时需要根据数据记录创建时间create_time字段倒序,即使用order by create_time desc limit ?,?,但是我们会发现,前端进行请求时获取的数据并不正确,分页中出现了一定的重复数据。问题原因期初还很好奇,总数没问题,总查询也没问题,为什么数据会重复了,然后会把部分数据给覆盖了。后来...

weixin_29118723的博客 894

手把手教你用CH582的USB0/1双接口玩转CherryUSB协议栈(附完整代码)

本文深入解析CH582双USB接口硬件架构,详细讲解如何通过CherryUSB协议栈实现双接口协同工作,包括中断处理设计、端点资源分配和复合设备描述符配置。提供HID+CDC复合设备实战案例,并分享高级调试技巧与性能优化方法,帮助开发者充分利用CH582的USB0/1双接口潜力。

weixin_42525637的博客 264

MySQL分页排序时数据重复问题

问题版本 MySQL 5.6 问题复现 首先,创建一张表,记录的是用户信息,id是主键,其他为业务字段。 CREATE TABLE `account_info` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `seq` bigint(20) unsigned DEFAULT NULL COMMENT '序号', `userId` varchar(64) NOT NULL COMMENT '用户ID', `

大摩羯先生 5358

第3.2.1章 Eigen代码实战:四元数赋值用法总结及与变换矩阵转换

Eigen库中四元数(Quaternion)的赋值方法解析:Quaterniond和Quaternion<double>本质相同,但Quaterniond是更简洁的别名。主要赋值方式包括直接构造(w,x,y,z分量、旋转矩阵或轴角)、赋值运算符和成员函数赋值。使用时需注意参数顺序、归一化处理和头文件包含,常见错误包括模板参数缺失和构造顺序错误。四元数广泛应用于旋转矩阵转换、姿态组合等场景,合理选择赋值方式能提高代码可读性和正确性。

行知SLAM 587

复现CVE-2014-085(Apache ZooKeeper 未授权访问漏洞)

默认安装配置完的zookeeper允许未授权访问,管理员未配置访问控制列表(ACL)。导致攻击者可以在默认开放的2181端口下通过执行envi命令获得大量敏感信息(系统名称、java环境)导致任意用户可以在网络不受限的情况下进行未授权访问读取数据。

记录并分享学习安全的知识点.. 2174

mysql在使用order by +limit分页时遇到的数据重复及丢失问题

mysql在使用order by +limit分页时遇到的数据重复及丢失问题

syg1207的博客 2177

lammps蒙特卡洛MC模拟案例

在lammps中,和MC相关的模拟命令有三个:fix gcmc、fix atom/swap、fix sgcmc。在一个lammps模拟中,mc和md可同时存在,间隔运行,所以设置fix sgcmc命令的同时,可以同时设置系综(nve、nvt或者npt)。lammps官网自带案例中也有一个fix sgcmc的案例,主要模拟FeCu合金的MC建模。sgcmc命令可应用到合金的模拟中,如短程有序模拟。MC运行间隔为100步,最终的浓度比例为0.02,也就是2%的Fe原子交换为Cu原子。大家好,我是小马老师。

lammps_jiayou的博客 1824

和面试官聊聊MySQL排序的坑(含order by limit 分页出现重复数据问题、结合索引 order by什么情况不会进行内存排序操作(Using filesort))

1、MYSQL按多个字段排序需要注意哪些问题? 2、有没有遇到过order by limit分页出现数据重复的问题?怎么解决的? 3、MySQL5.x低版本的排序是怎做的? 4、结合索引来看,order by什么情况会进行内存排序操作(Using filesort)? 5、where条件的字段不在索引中,只有order by的字段在索引中,会用到索引吗?会利用索引排序吗?

健身变秃,coding变强 6183

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

避坑:MySQL分页时出现的数据重复问题

在MySQL中我们通常会采用limit来进行翻页查询

m0_38048955的博客 3371

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

MyBatis排序+分页重复问题窥探

这个问题的探讨来源于同事遇到的问题:分页时数据重复了。这在之前是没有遇到过的,于是试着看找下原因。 说到排序,其实有这几种情况: 1.排序字段都没有值 这样排序没有意义 2.排序字段都有值,但都一样 这样排序也没有意义 3.排序字段都有值,值不唯一 较少的情况,也不是没有。 4.排序字段都有值,值唯一 正常情况,因为我们既然用那个字段排序,肯定是看到那个字段可以用来排序,值互不相同,有序可排。这种情况不会有问题。 那么就试着前三种情况看看MySQL的排序和通过MyBatis plus的结果

u011602668的博客 2611

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

如何解决MySQL order by limit语句的分页数据重复问题?

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料。

2401_83411843的博客 1025

MySQL 使用 order by limit 分页排序会导致数据丢失和重复!

作为程序员,经常写 SQL 语句是正常不过了。然而,编写一些 SQL 语句,总会出现一些奇怪的问题。 问题 最近在项目中遇到一个很神奇的问题,MySQL 使用 order by 进行排序并进行分页的时候,会出现部分数据丢失和重复。具体看下面这三张图 其中, 第一张图查询所有数据,并按 sort 字段排序, 第二张图,查询从第 1 条数据开始,查询 10 条数据,并按 sort 字段排序, 第三张图,查询从第 11 条数据开始,查询 10 条数据,并按 sort 字段排序, 仔细看我用红色标记出来的

格姗知识圈的博客 2695

MySQL分页坑(limit+order by数据重复)

问题描述 在MySQL中我们经常使用limit来进行分页查询,比如使用limit(0,10)标识列出第一页的10条数据,limit(10,10)表示列出第二页。但是,如果此时limit加上order by的时候,可能会出现翻到第二个时候,会出现第一页的数据。 具体如下: select ORG_CODE,NAME from b_org order by CREATE_TIME desc limit 6,6; 使用上述的SQL查询的时候,很有可能出现和Limit 0,6相同的某条记录。而如果使用如下

JesseZhao920 4811

Mysql分页第二页出现了第一页的数据

现象 mysql查询分页,第二页出现了第一页中的数据行,MySQL在order by和limit混用的时候,出现了排序的混乱情况。 原理 在MySQL 5.6的版本上,优化器在遇到order by limit语句的时候,做了一个优化,即 使用了priority queue。 使用 priority queue 的目的,就是在不能使用索引有序性的时候,如果要排序,并且使用了limit n,那么只需要在排序的过程中,保留n条记录即可,这样虽然不能解决所有记录都需要排序的开销,但是只需要 sort buffer

Connie1451的博客 2745
上一篇: 算法导论——归并排序和插入排序的结合版本 java
下一篇: 爬虫组队学习task-0:自学爬虫简单知识
happytaohaha
博客等级 码龄9年 37粉丝 187原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值