正如笔记一样,这个问题是one of my previous questions.的扩展。参数已经改变,所以我需要一个新答案。
我有一个MySQL表,它有四个字段post_id(unique int),user_id(int),category(varchar),score(int)。
我的目标是最终得到两个值,一个是用户帖子在“x”类别中的百分比。第二个是“x”类别中所有分数的总和。为此,我假设我需要从MySQL获得三个值:
score
)GROUP BY category
post_id
)GROUP BY category
post_id
)这是一个足够简单的查询。这是困难的部分:我需要获得前50名用户,按一些计算排序,如(百分比+总和)。我想我可以编写一个查询,在子查询/ JOIN中执行上述所有数学运算,然后在主查询中放置ORDER BY和LIMIT,但这似乎效率低下。我计划有200万用户,每个用户可以有5000个帖子。如果我这样做我的查询(我认为),那么永远将贯穿每一条记录。
运行这样的查询的最有效方法是什么?我已经阅读过关于MySQL视图的内容,这看起来是个不错的主意,但我也读到它们存在巨大的性能问题。值得吗?
还是不可能?我是否应该满足于每天运行几次CRON工作,并且只存储虚假实时数字?
答案 0 :(得分:1)
您是否已拥有庞大的用户数据库和大量帖子?
如果不这样做,您可以创建一个跟踪这些总和和计数的元表。当用户添加帖子或分数时,这些将很容易实时更新。每次需要重新计算统计信息的帖子和分数时,您都不必扫描数据库,因为您已经将它们放在表格中。相反,在这张桌子上进行计算会很容易。
当您创建将所有内容添加到元表中的函数时,开始时会有一些额外的工作。但从长远来看,它可能会得到回报。