MySQL优化具有大量评级的表

时间:2011-03-15 06:55:20

标签: mysql indexing

我已经尝试过寻找解决方案,但似乎无法找到解决方案。

我有一个帖子评分表,其中“评级”列为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秒钟。如何减少这段时间?

2 个答案:

答案 0 :(得分:1)

好吧,再创建一个聚合表,其中包含所有评级的计算值。并通过某些触发器或调度程序重新计算它。

答案 1 :(得分:1)

进行一些缓冲 - 每次用户对帖子进行评分,在帖子表中输入一个字段,您将在其中保存评分数。仅使用评级表来确定用户是否已经投票。