一个实例是 aws 上的 RDS ,一个是本地,都是下面这条 sql
select no, date, sum(amount) as amount from t group by no, date order by date desc LIMIT 10,10
结果查出来的数据不一致,有什么原因造成的吗。主要是 rds 查出来分页结果还是错的,有数据同时在LIMIT 0,10
和LIMIT 10,10
都出现了。本地 mysql 查询确没有这种情况
![]() | 1 zhongpingjing OP 然后比较神奇的是,数据只有刚好 20 条时就会不一致,23 条时 rds 查询结果又是正确的 |
![]() | 2 zjp 2024-03-13 11:10:09 +08:00 via Android 按 date 排序 第 10 和 11 是相同的 date ,有唯一键的话,加上作为排序键 |
3 kcccc 2024-03-13 11:12:51 +08:00 ![]() 请看官方文档中的描述 https://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html 如果多行在列中具有相同的值 ORDER BY ,则服务器可以自由地以任何顺序返回这些行,并且可以根据整体执行计划以不同的方式返回这些行。 你的数据中 date 有相同的值,而你只按 date 来排序。 |
![]() | 4 zhongpingjing OP @kcccc 确实是,感谢 |
![]() | 5 xwg999 2024-03-13 13:28:49 +08:00 db 99%不会错 |
6 sampeng 2024-03-13 14:20:37 +08:00 一边进来一边想不会是有 group 和 order by 吧?。。一看果然是。。 |
![]() | 7 siweipancc 2024-03-13 15:23:41 +08:00 via iPhone 一般最后要加上 id 。不然会被提 bug |
![]() | 8 wuhao1 2024-03-13 16:14:32 +08:00 |