V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhongpingjing
V2EX  ›  数据库

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

  •  
  •   zhongpingjing · 260 天前 · 1198 次点击
    这是一个创建于 260 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个实例是 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 查询确没有这种情况

    8 条回复    2024-03-13 16:14:32 +08:00
    zhongpingjing
        1
    zhongpingjing  
    OP
       260 天前
    然后比较神奇的是,数据只有刚好 20 条时就会不一致,23 条时 rds 查询结果又是正确的
    zjp
        2
    zjp  
       260 天前 via Android
    按 date 排序 第 10 和 11 是相同的 date ,有唯一键的话,加上作为排序键
    kcccc
        3
    kcccc  
       260 天前   ❤️ 2
    请看官方文档中的描述
    https://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html

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

    你的数据中 date 有相同的值,而你只按 date 来排序。
    zhongpingjing
        4
    zhongpingjing  
    OP
       260 天前
    @kcccc 确实是,感谢
    xwg999
        5
    xwg999  
       260 天前
    db 99%不会错
    sampeng
        6
    sampeng  
       260 天前
    一边进来一边想不会是有 group 和 order by 吧?。。一看果然是。。
    siweipancc
        7
    siweipancc  
       260 天前 via iPhone
    一般最后要加上 id 。不然会被提 bug
    wuhao1
        8
    wuhao1  
       260 天前
    https://wuhao.pw/archives/178/
    当 group by 遇上 order by 后总感觉语句是对的,然而结果却
    和你的有异曲同工之效
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1312 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 17:57 · PVG 01:57 · LAX 09:57 · JFK 12:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.