我在存储过程中使用以下查询来获取用户的排名。
在尝试优化数据库时,我正在尝试确定此查询是否可以优化,因为它是我数据库中最常用的查询。
id列已编入索引。
SELECT
@p_rank = all_time_rank
FROM
(SELECT
user_rankings.*,
RANK() OVER (ORDER BY score DESC) AS all_time_rank
FROM
user_rankings) t
WHERE
id = @p_id;
有没有办法让这个查询更好地执行?
答案 0 :(得分:2)
您可以将其命名为:
SELECT @p_rank = COUNT(*) + 1
FROM user_rankings ur
WHERE ur.score > (SELECT ur2.score FROM user_rankings ur2 WHERE ur2.id = @pid);
您需要user_rankings(id, score)
和user_rankings(score)
上的索引。
我认为这会有更好的表现。