我有一个游戏,每个圆形玩家获得奖品,并计算总奖金等级。 我使用这样的架构:
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),但为了找到他的新订单,我需要求助于整个表,并且性能不可行。
是否可以重新组织表以提高此操作的性能?
谢谢!
答案 0 :(得分:1)
SELECT COUNT(*)
FROM rating
WHERE total_prize <= (SELECT total_prize FROM rating WHERE user_id = ?)
(或者执行单独的查询并获取用户的total_prize,以及您需要的其他列,然后计算它。)
当然要确保在total_prize上有一个索引。
(您可能需要&gt; =相反,取决于您的排名。)