V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
wmwmajie
V2EX  ›  问与答

mysql 获取某商品的前十条评论,不使用 group by 有什么好的方案吗?

  •  1
     
  •   wmwmajie · Sep 8, 2020 · 1328 views
    This topic created in 2058 days ago, the information mentioned may be changed or developed.

    mysql 获取某商品的前十条评论,不使用 group by 有什么好的方案吗? 发现 gourp by 需要先分组在过滤出前 10 个,所有要处理的数据反而会很多。 有什么方式不用 group by 简洁高效吗?求指教

    10 replies    2020-09-08 19:19:10 +08:00
    106npo
        1
    106npo  
       Sep 8, 2020 via Android
    指定商品的评论,那不是 order 加 limit 就可以么,具体表结构是什么?
    daozhihun
        2
    daozhihun  
       Sep 8, 2020
    只要查某商品的前十条评论,为啥要 group by,你 where id=xxx 不就把其他商品的都过滤掉了
    gz911122
        3
    gz911122  
       Sep 8, 2020
    window 开窗函数
    wysnylc
        4
    wysnylc  
       Sep 8, 2020
    十有八九你是要同时查询多个商品的前 10 条评论
    开窗函数可以解决
    或者异步多次查询但是小心 N+1
    wmwmajie
        5
    wmwmajie  
    OP
       Sep 8, 2020
    @xmumiffy 不好意思写错了,是多个商品的前 10 个。
    wmwmajie
        6
    wmwmajie  
    OP
       Sep 8, 2020
    是多个商品的前 10 个,写错了。
    wmwmajie
        7
    wmwmajie  
    OP
       Sep 8, 2020
    这个不用 group by 的解决方式想到有两个,比如拼接一个有多个子查询的大 sql 。
    或者就直接多次查询,单个 limit,虽然查询次数和解析 sql 语句次数变多,但是要处理的数据反而比 gourp by 少。

    就是不知道有没有更简洁的 sql 能搞定,前提是不用 gourp by
    daozhihun
        8
    daozhihun  
       Sep 8, 2020
    @wmwmajie group over partition,就是上面提到的开窗函数。
    其实多次查询也是可行的,解析 sql 不需要担心,你这些查询都很相似,不会全部重新进行分析的
    wmwmajie
        9
    wmwmajie  
    OP
       Sep 8, 2020
    @daozhihun 了解
    wmwmajie
        10
    wmwmajie  
    OP
       Sep 8, 2020
    不知道有没有人研究过 这类分组和直接循环查询的区别,个人能想到的是 分组查询比如 group by,窗口这类都需要过一遍所有满足条件的数据,例如 10 个分类,每个分类 10W 个,那是否就需要有能保存这 100W 个数据标识的内存空间和对他们分组排序的时间消耗?

    如果只是循环查询 10 次,每次 limit 10 那对数据库的压力会不会反而小很多?

    没太研究底层,只是理论上分享,望大佬答疑。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1004 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 19:19 · PVG 03:19 · LAX 12:19 · JFK 15:19
    ♥ Do have faith in what you're doing.