Mysql 需要游戏玩家评级计算的数据库/查询设计帮助吗

Mysql 需要游戏玩家评级计算的数据库/查询设计帮助吗,mysql,database,performance,database-design,query-optimization,Mysql,Database,Performance,Database Design,Query Optimization,我有一个游戏,每个回合的玩家都会得到一个奖品,并根据总奖品计算等级。 我使用这样的模式: 1表game_result user_id、prize、game_date用于单独存储游戏结果我需要它用于统计 2.表rating user_id、total_prize、total_games用于存储评级数据,total_prize、total_games值在每个游戏结束时更新 3我需要快速找到用户的总奖金和排名,以便在游戏中显示。现在我使用一种这样的查询 SET @rank=0; SELECT @ran

我有一个游戏,每个回合的玩家都会得到一个奖品,并根据总奖品计算等级。 我使用这样的模式:

1表game_result user_id、prize、game_date用于单独存储游戏结果我需要它用于统计

2.表rating 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_是一名玩家的游戏,但要找到他的新订单位置,我需要使用整个桌子,而表演是不可行的

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

谢谢

SELECT COUNT(*)
FROM rating
WHERE total_prize <= (SELECT total_prize FROM rating WHERE user_id = ?)
或者做一个单独的查询,获得用户的总奖金,加上您需要的其他列,然后计算

当然,要确保总奖金有一个索引


你可能需要>=取而代之,这取决于你所说的排名。

有趣,阿里尔。我将尝试此查询并比较性能。