【问题标题】:Need help with database/query design for gamer's rating calculation需要帮助为游戏玩家评分计算设计数据库/查询
【发布时间】:2011-09-16 08:51:28
【问题描述】:

我有一个游戏,每轮玩家都会获得一个奖品,并计算总奖品的评分。 我使用这样的架构:

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_games),但是要找到他的新订单位置,我需要使用整个表,并且性能不可行。

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

谢谢!

【问题讨论】:

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


    【解决方案1】:
    SELECT COUNT(*)
    FROM rating
    WHERE total_prize <= (SELECT total_prize FROM rating WHERE user_id = ?)
    

    (或者做一个单独的查询,得到用户的total_prize,加上你需要的其他列,然后计算它。)

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

    (您可能需要 >= 代替,具体取决于您所说的排名。)

    【讨论】:

    • 有趣,爱丽儿。我会试试这个查询并比较性能。
    猜你喜欢
    • 2014-12-04
    • 2023-03-24
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多