MYSQL ORDER BY与LIMIT的坑

前段时间开发遇到的坑,下面测试提的问题(描述)

 测试: 前端显示的页面中第一页与最后一页的数据有重复

自己排查后发现

发现不只是第一页与最后一页有重复数据出现。好像还是随机的,发现这个问题之后自己也是百思不得其解啊!头疼,我只是在查询啊,咋还有问题呢?下面就开始漫长的找bug中!... ... 

结论就是自己写还是没有发现bug处在哪?只能google了!不要问我为啥不用百度,就是不想用!(但是确实是有问题的!!!)

终于找到原因

下面是在google上找到的关于mysql的原文介绍

请添加图片描述

大概意思就是如果在ORDER BY列中有多个行具有相同的值,则服务器可以自由以任何顺序返回这些行,并且根据整体执行计划的不同,返回值可能会有所不同。 换句话说,这些行的排序顺序相对于无序列是不确定的。
基于这个,就知道为什么会出现这个问题了。这个SQL主要问题是会可能导致分页查询查不出一些记录,如果字段相同的记录多于分页每页记录数,就会导致一些记录上一页出现了,下一页又查出了(MySQL随机返回导致的),而一些数据可能就查不出来了。怎么解决这个问题,想必大家页想到了,MySQL官网上也给出了一种方案:
“If it is important to ensure the same row order with and without LIMIT, include additional columns in the ORDER BY clause to make the order deterministic. For example, if id values are unique, you can make rows for a given category value appear in id order by sorting like this:”

解决

 order by change_time,id limit 100 // id为主键
 order by 加入这个唯一的索引问题得以解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值