繁体   English   中英

按SUM排序时的最佳SQL查询

[英]Optimal SQL Query when ORDERing BY SUMs

只是注意,这个问题是我先前问题之一的扩展 参数已更改,因此我需要一个新答案。

我有一个MySQL表,该表具有四个字段post_id(unique int),user_id(int),category(varchar),score(int)。

我的目标是最终得到两个值,一个是“ x”类别中用户帖子的百分比。 第二个是该“ x”类别中所有分数的总和。 为此,我假设我需要从MySQL获取三个值:

  • SUM( score )GROUP BY category
  • COUNT( post_id )GROUP BY category
  • COUNT( post_id

因此,这足以编写一个简单的查询。 这是困难的部分:我需要按(百分比+总和)之类的计算顺序来排名前50位用户。 我想我可以编写一个在子查询/ JOIN中执行上述所有数学运算的查询,然后将ORDER BY和LIMIT放入主查询中,但这似乎效率很低。 我正在计划200万用户,每个用户可以有5000个帖子。 如果我这样进行查询(我认为),那么遍历所有这些记录将需要永远的时间。

像这样运行查询的最有效方法是什么? 我已经阅读了有关MySQL视图的想法,这似乎是一个不错的主意,但我也阅读了它们存在巨大的性能问题。 这值得么?

还是不可能? 我是否应该满足每天几次执行CRON作业并仅存储虚假实时数字的条件?

您已经有一个庞大的用户数据库和很多帖子吗?

如果您不这样做,则可以创建一个跟踪这些总和和计数的元表。 当用户添加帖子或分数时,这些实时更新将很容易。 您不必每次都需要重新统计统计信息的职位和分数时,就不必扫描数据库,因为您已经将它们存储在表格中了。 相反,在此表上进行计算将很容易。

在创建将所有内容添加到元表的功能时,开始时需要做一些额外的工作。 但是从长远来看,它可能会有所回报。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM