mysql 获取某商品的前十条评论,不使用 group by 有什么好的方案吗? 发现 gourp by 需要先分组在过滤出前 10 个,所有要处理的数据反而会很多。 有什么方式不用 group by 简洁高效吗?求指教
1
xmumiffy 2020-09-08 18:27:45 +08:00 via Android
指定商品的评论,那不是 order 加 limit 就可以么,具体表结构是什么?
|
2
daozhihun 2020-09-08 18:30:50 +08:00
只要查某商品的前十条评论,为啥要 group by,你 where id=xxx 不就把其他商品的都过滤掉了
|
3
gz911122 2020-09-08 18:34:11 +08:00
window 开窗函数
|
4
wysnylc 2020-09-08 18:36:08 +08:00
十有八九你是要同时查询多个商品的前 10 条评论
开窗函数可以解决 或者异步多次查询但是小心 N+1 |
6
wmwmajie OP 是多个商品的前 10 个,写错了。
|
7
wmwmajie OP 这个不用 group by 的解决方式想到有两个,比如拼接一个有多个子查询的大 sql 。
或者就直接多次查询,单个 limit,虽然查询次数和解析 sql 语句次数变多,但是要处理的数据反而比 gourp by 少。 就是不知道有没有更简洁的 sql 能搞定,前提是不用 gourp by |
8
daozhihun 2020-09-08 18:46:13 +08:00
@wmwmajie group over partition,就是上面提到的开窗函数。
其实多次查询也是可行的,解析 sql 不需要担心,你这些查询都很相似,不会全部重新进行分析的 |
10
wmwmajie OP 不知道有没有人研究过 这类分组和直接循环查询的区别,个人能想到的是 分组查询比如 group by,窗口这类都需要过一遍所有满足条件的数据,例如 10 个分类,每个分类 10W 个,那是否就需要有能保存这 100W 个数据标识的内存空间和对他们分组排序的时间消耗?
如果只是循环查询 10 次,每次 limit 10 那对数据库的压力会不会反而小很多? 没太研究底层,只是理论上分享,望大佬答疑。 |