求解,同样的数据,同样的 sql,在不同实例执行结果就不一样

105 天前
 zhongpingjing

一个实例是 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,10LIMIT 10,10 都出现了。本地 mysql 查询确没有这种情况

1062 次点击
所在节点    数据库
8 条回复
zhongpingjing
105 天前
然后比较神奇的是,数据只有刚好 20 条时就会不一致,23 条时 rds 查询结果又是正确的
zjp
105 天前
按 date 排序 第 10 和 11 是相同的 date ,有唯一键的话,加上作为排序键
kcccc
105 天前
请看官方文档中的描述
https://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html

如果多行在列中具有相同的值 ORDER BY ,则服务器可以自由地以任何顺序返回这些行,并且可以根据整体执行计划以不同的方式返回这些行。

你的数据中 date 有相同的值,而你只按 date 来排序。
zhongpingjing
105 天前
@kcccc 确实是,感谢
xwg999
104 天前
db 99%不会错
sampeng
104 天前
一边进来一边想不会是有 group 和 order by 吧?。。一看果然是。。
siweipancc
104 天前
一般最后要加上 id 。不然会被提 bug
wuhao1
104 天前
https://wuhao.pw/archives/178/
当 group by 遇上 order by 后总感觉语句是对的,然而结果却
和你的有异曲同工之效

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1023149

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX