我已经尝试过寻找解决方案,但似乎无法找到解决方案。
我有一个帖子评分表,其中“评级”列为0或1,具体取决于某人是否竖起大拇指或竖起大拇指。目前大约有2000个批准的帖子和280万个评级。
我想找到通过审核批准的前20个评级帖子。这是我认为可行的查询:
SELECT p.* FROM `posts` p
LEFT JOIN `ratings` r ON r.pid=p.id
WHERE p.approved=1
GROUP BY p.id
ORDER BY AVG(r.rating) DESC LIMIT 0,20
我在r.rating上添加了一个索引,查询仍需要大约3秒钟。如何减少这段时间?
答案 0 :(得分:1)
好吧,再创建一个聚合表,其中包含所有评级的计算值。并通过某些触发器或调度程序重新计算它。
答案 1 :(得分:1)
进行一些缓冲 - 每次用户对帖子进行评分,在帖子表中输入一个字段,您将在其中保存评分数。仅使用评级表来确定用户是否已经投票。