需要数据库/查询设计的帮助才能获得游戏玩家的等级计算

时间:2011-09-16 08:51:29

标签: mysql database performance database-design query-optimization

我有一个游戏,每个圆形玩家获得奖品,并计算总奖金等级。 我使用这样的架构:

1)table game_result(user_id,prize,game_date)用于分别存储游戏结果(我的统计数据需要它)

2)表评级(user_id,total_prize,total_games)用于存储评级数据和total_prize,total_games值在每场比赛结束时更新

3)我需要快速找到用户的总奖金和排名(在比赛期间显示)。现在我使用了一种查询

SET @rank=0;
SELECT @rank:=@rank+1 AS rank, user_id, total_prize, total_games FROM rating order by total_prize where user_id = ? 

但它会为每个查询调整评级表并且速度太慢。问题是,在每个游戏之后,只有一行被改变(使用total_prize,total_games),但为了找到他的新订单,我需要求助于整个表,并且性能不可行。

是否可以重新组织表以提高此操作的性能?

谢谢!

1 个答案:

答案 0 :(得分:1)

SELECT COUNT(*)
FROM rating
WHERE total_prize <= (SELECT total_prize FROM rating WHERE user_id = ?)

(或者执行单独的查询并获取用户的total_prize,以及您需要的其他列,然后计算它。)

当然要确保在total_prize上有一个索引。

(您可能需要&gt; =相反,取决于您的排名。)