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

在MySQL分页查询中发现重复数据,通过分析定位到问题在于`ORDER BY`与`LIMIT`结合时,尤其在MySQL5.6之后由于堆排序导致。解决方案是针对排序字段有相同值的情况进行调整。
摘要由CSDN通过智能技术生成

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

mysql 分页查询出现重复数据

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

问题分析定位

在测试提供的测试用例以后,我测试了一下,在查第二页和第三页的数据里面确实有重复的数据,这真的很神奇。
1.我的第一反应就是分页插件有问题,所以将每次请求的sql语句打印出来看一下,发现没啥问题啊。这就很尴尬啊。
2.然后就不用分页,将分页干掉,然后查询出来整体数据,发现没啥问题,那就表明出现问题的地方在分页上面。但是问题有出来了,我大mysql的分页语句limit会有问题么?
3.问题出现的地方找到了,发现问题,那就要去解决。然后经过查询资料和百度了一下,发现这个问题是我们 order by 语句与limit分页语句组合在一起出现了问题

问题解决方案

  1. 因为我们在使用order by 字段时,如果这个排序字段会有相同的值,这个时候与limit组合以后就会出现数据重复现象。那这是为啥呢?经过了解,这个问题是在mysql5.6以后才会出现,mysql5.5不会出现。这是由于mysql5.6做了优化,将排序方法改成了堆排序,堆排序每次请求的结果都会不一致。
  2. 这个问题我的解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值