【mysql】mysql limit ?,? 分页结果 每一页的数据都重复

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

今天在测试的时候随便点击了一下倒数几页数据,
发现了一个奇异的事件
【怎么615,617,618…分页数据完全一样??】

打开idea查看分页代码ing…
仅仅是一个普通再普通不过的sql
参考

select * from table order by create_time desc

把偏移参数带入sql

select * from table order by create_time desc limit 30500,50
select * from table order by create_time desc limit 30550,50
select * from table order by create_time desc limit 30700,50

惊奇的发现 从mysql查出来的分页也是重复的!!!!

问题大致可能出现在mysql里
查阅了一下

在MySQL 5.6的版本以后,优化器在遇到order by limit的语句时候,会做一个priority queue的优化。

使用priority queue的目的,就是在不能使用索引有序性的时候,如果要排序,并使用了limit
n,那么只需要在排序的过程中,保留n条记录即可,这样虽不能解决所有记录都需要排序的开销,但只需要sort
buffer少量的内存就可以完成排序。

之所以5.6版本以后出现第二页数据重复的问题,就是因为priority
queue使用了堆排序的排序方法,而堆排序是一个不稳定的排序方法,也就是相同的值可能排序出的结果和读出来的数据顺序不一致。

同时,我们再看一下MySQL语句关键字执行顺序依次为 form… where… select… order by…
limit…,由于上述priority queue的原因,在完成select之后,所有记录是以堆排序的方法排列的,在进行order
by时,仅把view_count值大的往前移动。

但由于limit的因素,排序过程中只需要保留到5条记录即可,view_count并不具备索引有序性,所以当第二页数据要展示时,mysql见到哪一条就拿哪一条,因此,当排序值相同的时候,第一次排序是随意排的,第二次再执行该sql的时候,其结果应该和第一次结果一样。

大致问题就是 目前我们的很大一部分数据是导入的 所以create_time是相同的 遇到相同的create_time mysql5.6使用了不稳定的一个堆排序 导致数据重复

解决方法
新增或修改排序字段( id总不重复吧!

select * from table order by create_time desc,id desc

分页这个东西也只是limit的衍生偏移排序查询 之后可能会遇到其他不一样的问题 慢慢解决吧!

开源PACS系统Orthanc(DICOM服务器)配置 PACS(Picture Archiving and Communication System)是医学影像的数字化存储、检索和传输系统,用于管理和存储医学图像和相关信息,如放射学、核医学、超声、病理学等各种医学影像。PACS系统通过数字化技术取代了传统的胶片方式,使医疗机构能够更高效地存储、传输和查看医学图像,从而提高了医疗图像的管理和工作流程。 阅读详情

相关推荐

PaddleOCR实战:从零开始训练自己的OCR模型(附完整代码与数据集处理技巧)

本文提供了一份详尽的PaddleOCR实战指南,手把手教你从零开始训练专属的OCR模型。内容涵盖高质量训练数据的准备与标注技巧、预训练模型的选型对比、关键参数调优策略,并附有完整的代码示例。通过遵循本文的步骤,开发者可以高效构建并优化贴合自身业务场景的高精度OCR模型,实现从数据到部署的全流程掌握。

weixin_29263201的博客 570

MySQL - 当LIMIT 进行分页时,为什么出现了重复数据

为了避免类似的问题,我们可以将主键(或者具有唯一性的字段)排序引入需要排序的业务字段后。

杜海的博客 3315

ArcGIS Pro 拓扑编辑实战:从‘地图拓扑’到‘共享编辑’,手把手教你批量修改要素

本文详细介绍了ArcGIS Pro中的拓扑编辑功能,从地图拓扑配置到共享编辑技巧,手把手教你如何批量修改要素。通过实战案例展示拓扑编辑在城市规划、地籍管理等场景中的应用,显著提升编辑效率并减少拓扑错误,是现代GIS技术的重要生产力工具。

weixin_30500473的博客 505

mysql:order by limit 同时使用,排序字段值重复时无法保证数据顺序

MySQL 8.0.21之前,没有办法覆盖此行为,即使在使用其他优化可能更快的情况下也是如此。从MySQL 8.0.21开始,可以通过将优化器_switch系统变量的prefer_ordering_index标志设置为关闭来关闭此优化。请在order BY子句中包含额外的列,以使顺序具有确定性。例如,如果id值是唯一的,则可以通过如下排序,使给定类别值的行以id顺序出现。优化器在默认情况下尝试选择有序索引。

baidu_36124158的博客 1332

5分钟搞定!用ZLMediaKit搭建GB28181视频监控系统(含避坑指南)

本文提供了一份基于ZLMediaKit搭建GB28181视频监控系统的实战指南。文章详细介绍了从环境准备、核心组件(ZLMediaKit与SIP服务器)部署、摄像头配置到内外网穿透的完整流程,并重点分享了设备ID配置、防火墙设置等关键避坑经验,帮助开发者快速构建稳定可控的监控平台。

apple5的专栏 1082

从Chiplet到UCIE:D2D互联技术如何重塑半导体设计生态

本文探讨了D2D互联技术在半导体设计中的革命性作用,从Chiplet到UCIE标准的演进如何重塑行业生态。详细分析了D2D互联的技术本质、架构选择及UCIE标准带来的变革,并展望了未来光学D2D和3D集成等趋势。高速互联接口技术的突破为AI加速器和计算芯片提供了更高带宽和能效。

weixin_29292535的博客 931

java用limit循环读取mysql直到全部读完,并能显示读了多少条

import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class ReadDBPage { /** * 查询总条数 * @...

wsfw014的专栏 1153

QuestaSim使用Xilinx库的设置

安装QuestaSim

miracle_eicont的专栏 3407

mysql循环遍历获取_如何循环遍历MySQL行?

I am trying to achieve a web PHP program that will display data from a records in a MySQL database in a HTML form. I have a couple of navigation buttons that I wish to cycle to the next and previous r...

weixin_42127369的博客 448

【23】C++实战篇——C++报错:LNK2001:无法解析的外部符号 ,LNK2019: 无法解析的外部符号,原因分析及解决方法

该文分析了VS项目中出现的"无法解析的外部符号"LNK2001/LNK2019错误。问题表现为跨项目共享变量时,Projector项目无法解析Line项目中声明的外部变量ImgSavePath和ImgFormat。原因在于头文件声明了变量但未包含实现的源文件。解决方法是将getLine.cpp文件添加到Projector项目中。文章还总结了两种错误代码的区别:LNK2001通常对应变量缺失,LNK2019对应函数缺失。最后列出了具体的报错信息,包括无法解析的变量和函数符号。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2006

优化翼型形状的遗传算法实现

在每一代种群中,通过计算每个个体的适应度值,选择具有较高适应度值的个体,并使用交叉和变异算子对它们进行操作,从而生成新的个体。具体而言,我们将采用一个参数化的翼型模型,其中包括几何设计变量,如角度、弯曲和厚度等,以及性能指标,如升阻比和扭矩等。总之,本文提供了一个基于遗传算法的优化方法,用于寻找最优的翼型形状,并提供MATLAB源代码。需要注意的是,上述代码中的objFunc函数是一个示例性质的目标函数,实际应用中需要根据具体的问题进行修改。1.初始化一个随机的种群,其中每个个体代表一个参数化的翼型模型。

与其临渊羡鱼,不如退而结网 516

mysql-分页数据重复

以前碰到过类似问题,是因为排序字段导致的,因为排序字段一样导致分页临界点的查询数据展示可能会重复。分页查询不同页出现重复数据,底层实现都是使用limit。从51条开始,显示后面的100条。第101条开始的50条数据。

一个博客 1819

CLASSB类移植(满足IEC 60730-1和60355-1标准)

针对软件认证需要满足IEC 60730-1和60335-1标准,ST公司专门提供的软件扩展包X-CUBE-CLASSB,它包含自测库和文档,支持多种STM32系列芯片,通过预集成测试库和标准化流程,帮助开发者快速满足国际安全标准,适用于家电、工业控制等高可靠性场景。ClassB软件包程序检测内容分为两个主要部分:启动时的自检和运行时的周期自检,MCU在上电的时候会进行复位启动,在启动完成以后会进行运行自检。

m0_61973119的博客 1401

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

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

2401_83411843的博客 1025

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

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

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

MySQL分页查询limit数据重复踩坑记

1. 问题背景 线上有一个批处理任务,会批量读取昨日的数据,经过一系列加工后,插入到今日的表中。表结构如下: CREATE TABLE `detail_yyyyMMdd` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `batch_no` varchar(64) NOT NULL COMMENT '批次号', `order_id` varchar(64) NOT NULL COMMENT '订单ID', `user_id` v

云树在路上 2006

MySQL分页时使用 limit+order by 会出现数据重复问题

MySQL分页时使用 limit+order by 会出现数据重复问题(踩坑)

laifengtao的博客 1687

MySQL 使用 limit 分页会导致数据丢失、重复和索引失效

项目场景: 作为程序员,经常写 SQL 语句是正常不过了,在项目中我们都会使用【limit】进行查询,但在最近几个项目中都出现异常。 问题一:遗漏数据 在XXX项目中,进行歌手分页查询使用limit进行分页拉取,但在结果统计数据中出现了数据缺失 数据查询sql: SELECT count(*) FROM `xx` where is_china in (4,6) SELECT id FROM `xx` WHERE is_china IN ( 4, 6 ) LIMIT #{start},#{pageSize

ChengHuanHuaning的博客 1万+

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

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

order by+limit会出现数据丢失及分页重复问题一开始表没有任何索引,主键。直接上图:图1:图2:图2从图中可以看出,id=30的数据在第1页,和第3,最后1页重复了2次通过查看执行计划,发现排序方式是文件排序,

ygd185的博客 1775

PostgreSQL Limit分页写法

介绍PostgreSQL的Limit分页用法,并与MySQL做简单对比

reading-conference-writing 5651

mysql limit分页 第二页多一页_☆MySQL order by limit 分页数据重复问题

0 问题描述在MySQL中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的10条数据,limit(10,10)表示列出第二页。但是,当limit遇到order by的时候,可能会出现翻到第二页的时候,竟然又出现了第一页的记录。具体如下:SELECT `post_title`,`post_date` FROM post WHERE `post_status`='pu...

weixin_30499557的博客 614

MySQL的两种分页方式:Offset/Limit分页和游标分页

分页方式的选择需依据具体应用场景与性能要求。如果你的应用允许宽松的精确度或需要支持随机页面访问,Offset/Limit分页可能是不错的选择。然而对于深度分页或大数据场景,游标分页表现更为优秀,尤其是在动态数据集上避免了数据漂移问题。两者并无绝对优劣,最重要的是根据业务需求选择最适合的实现方式。

程序新视界 1863

MySQL order by limit 分页数据重复问题

问题描述 在MySQL中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的10条数据,limit(10,10)表示列出第二页。但是,当limit遇到order by的时候,可能会出现翻到第二页的时候,竟然又出现了第一页的记录。 具体如下: 小编有一个免费分享资料和大量干货的圈688244617 欢迎一起来讨论学习 SELECT `post_title`,`p...

weixin_45342712的博客 638

MySQL 使用order by limit 分页重复问题

一、问题描述 执行以下sql,在数据没有插入删除的情况下,返回的数据可能不一致,导致线上出现重复数据 select xxx from table where xxx order by xxx limit offset 二、产生原因 在mysql 5.6版本,mysql对order by limit 做了一个优化,使用了priority queue,priority queue使用的是堆排序策...

qq_34092585的博客 5404
上一篇: 你的sql慢可能还真是因为索引未命中
下一篇: 手把手接入【微信测试公众号】,不会还有人不会调试公众号吧?
nipppppp
博客等级 码龄8年 9粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值