mysql5.6分页数据重复或丢失的问题

项目用了mysql5.6  版(5.6.39),查询某个表时根据时间排序,用limit分页时发现当前页的某项数据在下一页偶尔也会出现,导致我们认为本该出现的数据没有出现(即所谓“丢失”)。并且每次limit不同的页导致有部分数据总数变化,其本质是一样的,都是数据错乱。到网上搜索了一些资料:

发现,我们order by 排序的时候,如果排序字段中有多行相同的列值,则排序结果是不确定的

问题解决方式如下:

最简单的方法就是在排序列上加索引,然后在 order by 上明示 主键id,问题就能解决。

或者

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

 

 

参考以下资料:

MySQL · 答疑解惑 · MySQL Sort 分页 http://mysql.taobao.org/monthly/2015/06/04/

解决 MySQL 分页数据错乱重复  https://www.cnblogs.com/glon/p/6806064.html

解决mysql分页数据错乱问题  https://www.cnblogs.com/self-studyRen/p/9295724.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值