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

2020-09-08 18:25:40 +08:00
 wmwmajie

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

938 次点击
所在节点    问与答
10 条回复
xmumiffy
2020-09-08 18:27:45 +08:00
指定商品的评论,那不是 order 加 limit 就可以么,具体表结构是什么?
daozhihun
2020-09-08 18:30:50 +08:00
只要查某商品的前十条评论,为啥要 group by,你 where id=xxx 不就把其他商品的都过滤掉了
gz911122
2020-09-08 18:34:11 +08:00
window 开窗函数
wysnylc
2020-09-08 18:36:08 +08:00
十有八九你是要同时查询多个商品的前 10 条评论
开窗函数可以解决
或者异步多次查询但是小心 N+1
wmwmajie
2020-09-08 18:37:26 +08:00
@xmumiffy 不好意思写错了,是多个商品的前 10 个。
wmwmajie
2020-09-08 18:38:28 +08:00
是多个商品的前 10 个,写错了。
wmwmajie
2020-09-08 18:41:14 +08:00
这个不用 group by 的解决方式想到有两个,比如拼接一个有多个子查询的大 sql 。
或者就直接多次查询,单个 limit,虽然查询次数和解析 sql 语句次数变多,但是要处理的数据反而比 gourp by 少。

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

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

没太研究底层,只是理论上分享,望大佬答疑。

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

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

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

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

© 2021 V2EX