代码编织梦想

问题描述:

在mysql8查询中使用ORDER BY结合LIMIT时,分页查询时出现后一页的数据重复前一页的部分数据。

问题模拟:

  • 表table_lock_test(忽视表名)中的字段及数据如下,
    在这里插入图片描述
    表中总共14条数据,其中11条数据的version列的值是相同的!

  • 使用ORDER BY结合LIMIT进行分页查询,查询第1、2页:(每页显示7条),进行对比

SELECT * FROM table_lock_test ORDER BY `version` DESC LIMIT 7;
SELECT * FROM table_lock_test ORDER BY `version` DESC LIMIT 7,7;

对比结果如下:
在这里插入图片描述

原因分析

  • 看如下两个查询
  1. 根据version列排序,查询前10条数据
    在这里插入图片描述

  2. 根据version列排序,查询前5条数据
    在这里插入图片描述

  3. 根据以上对比,可大胆猜测,ORDER BY与LIMIT结合使用时,如果被排序ORDER BY的列的值相同,那么它们的查询结果的顺序,可能不固定。

问题解释

当查询第2页数据时,id为14 (- HJUIO- 4)的数据的顺序并不在第3的位置,而是出现在了第11的位置,作为第2页的数据再返回了, 这时结合第1页的查询数据就出现了1条重复数据; 同时,必然会出现重复多少条就会有多少数据凭空消失,结合上面的对比图可知这里消失的是id 为 8 的数据。

问题解决

如果排序ORDER BY列有相同的值的时候,再添加一个索引 INDEX列,如主键列一起排序就不会出现上面的数据重复、数据消失的问题了

验证

  • 使用ORDER BY结合LIMIT进行分页查询,查询第1、2页:(每页显示7条),进行对比, 排序时增加INDEX列,这里增加id
SELECT * FROM table_lock_test ORDER BY `version` DESC,id LIMIT 7;
SELECT * FROM table_lock_test ORDER BY `version` DESC,id LIMIT 7,7;

对比结果如下:
在这里插入图片描述

官方文档支持

Msql8操作手册-mysql-refman-8.0-en 第8章-8.2.1.19
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_29025955/article/details/133930419

mysql查询时使用order by limit的隐患及解决办法_haoshuai2015的博客-爱代码爱编程

Mysql查询时使用order by limit的隐患及解决办法 Mysql + order by limit类似问题出现情景解决办法 Mysql + order by limit 我们经常会使用orde

mysql - 当limit 进行分页时,为什么出现了重复数据_soinice的博客-爱代码爱编程_limit 重复

哦,这时写的一个破SQL,遗留了个问题,没有去注意,所以造成了,有重复数据。因为引用了 PageHelper 插件,期初还以为是 插件有问题。后来想想,毕竟整个框架都是用的这个插件,就算有问题早应该会出现了。所以,第一时间想到了SQL,的确,去了排序就没有问题。 说在前面 数据库分页是后台经常要使用的技术手段,有时候进行数据库查询会根据业务需

mysql 排序后 分页 第一页数据和第二页数据部分数据重复问题-爱代码爱编程

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

MySQL分页坑(limit+order by数据重复)-爱代码爱编程

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

mysql order by limit分页时数据重复问题-爱代码爱编程

在我们在使用mysql进行数据查询时往往会遇到数据量过大需要分页展示的问题,这时候就会使用limit关键字: SELECT * FROM table LIMIT [param1,] param2; LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,

MySQL 使用 order by limit 分页排序会导致数据丢失和重复!-爱代码爱编程

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

MySQL分页查询limit数据重复踩坑记-爱代码爱编程

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

Mysql分页第二页出现了第一页的数据-爱代码爱编程

现象 mysql查询分页,第二页出现了第一页中的数据行,MySQL在order by和limit混用的时候,出现了排序的混乱情况。 原理 在MySQL 5.6的版本上,优化器在遇到order by limit语句的时候,做了一个优化,即 使用了priority queue。 使用 priority queue 的目的,就是在不能使用索引有序性的时候,

Mysql order by limit 分页查询结果有重复的数据-爱代码爱编程

今天遇到一个问题,mysql分页查询的结果第一页和第二页有重复的数据,看了一下sql -- 第一页 SELECT * FROM table1 WHERE col=0 ORDER BY col2 DESC LIMIT 10 -- 第二页 SELECT * FROM table1 WHERE col=0 ORDER BY col2 DESC LIMIT 10

【mysql】mysql limit ?,? 分页结果 每一页的数据都重复_nipppppp的博客-爱代码爱编程

今天在测试的时候随便点击了一下倒数几页数据, 发现了一个奇异的事件 【怎么615,617,618…分页数据完全一样??】 打开idea查看分页代码ing… 仅仅是一个普通再普通不过的sql 参考 select *

mysql8 分页数据重复或丢失问题说明(order by limit)_云游遍天下的博客-爱代码爱编程

这个问题,在生产环境出现了;当时测试那边也没测试到,我也是无语,还是客户发现的; 可能是因为现场数据较少,只有两页,客户一眼就能看到少数据了,也就是录入成功后的数据查不出来,还是在第二页,,如果pageSIze选择大一些,用一页展示是可以正常展示所有的数据的;关键关键这个问题是查询出来的数量是对的,经过排查,窝草sql没问题,就是mysql数据库

mysql问题:order by + limit分页时数据重复-爱代码爱编程

问题描述:MYSQL version 5.6.8 command 表结构 CREATE TABLE command ( ID INT NOT NULL, NAME VARCHAR(16), DESCRIPTION VARCHAR(32), INDEX idx_command_id (ID) ) ENGINE=InnoDB DEFA

mysql limit和order by一起使用出现的分页重复数据bug_mysql limit order 重复-爱代码爱编程

 🦆博主介绍:小黄鸭技术 🌈擅长领域:Java、实用工具、运维 👀 系列专栏:Bug之路 📧如果文章写作时有错误的地方,请各位大佬指正,一起进步!!! 🧡欢迎大家点赞➕收藏⭐➕评论💬支持博主🤞   项目场景 项目中有一个接口返回全量数据,数据量比较大导致页面渲染缓慢,所以改成分页来提高响应速度,按照一个状态status来排序。