给定表格:
ArcadeScores
------------
ID
GameID
UserID
Score
Milliseconds
Rank
哪里Rank
> 0 并计算为Score DESC then by Milliseconds ASC
(最好的分数总是最高的,如果分数相同,它由最快的人排名)。
存储Rank
是必需的,因为它允许我执行快速查询,例如How many top 3 scores does userID 5 have?
.
当通过对所有记录进行排序并循环每个记录更新排名来重新计算Rank
for aGameID
时,可以正常工作,但是当您有数千条记录时,遍历每条记录并对每条记录执行更新查询会减慢速度。对于流行的游戏(尤其是单个用户可能每 3 秒左右发布一个新分数的快速游戏),这太昂贵了。
给定一个新的分数记录,我需要确定它应该插入到哪个位置。如果我们的新记录要排名45
,我们可以将它上面的每条记录增加一个,这是一个便宜得多的操作:
UPDATE ArcadeScores SET ScoreRank = ScoreRank + 1 WHERE gameID = " + myGameID + " AND ScoreRank >= 45
我遇到的困难是计算要插入的记录的记录等级。Score
单独或单独它相当容易,但我Milliseconds
正在努力让它发现正确Rank
的两者结合。
一场比赛有多少得分记录是一个已知值。