我有一个排行榜,其中有一个“分数”列。我还在 score 列上有一个索引,它允许我非常快速地按分数排序表格,甚至可以切出前十名或任意数量的分数 - 即使有 500 万行!
但是,我真正想要的是在排行榜中也显示玩家“排名”。我尝试了几种方法,但在处理超过 100000 行的任何内容时似乎都没有叠加(它们开始占用半秒以上,考虑到我期待数百个当前用户,这太长了)。
我目前正在使用以下查询来确定一个用户的排名,然后在我的输出中为高于此的用户简单地递增 - 但它非常慢。
SELECT tro.score, tro.userId,
(
SELECT count(*)
FROM scoreboard tri
WHERE tri.score >= :score
) AS rank
FROM test_tracks tro
WHERE userId = :userID");
我正在考虑生成一个排名表来“缓存”用户在将新分数插入记分牌时的排名,但即使生成这个也需要很长时间(几分钟,可能是几小时)。
有谁知道建立排名的任何好的指南或技巧?最好我也希望能够对结果进行分页,但即使只是暂时建立排名就足够了!
提前致谢!