优化rank()查询



我在一个存储过程中使用以下查询来获取用户的排名。

在尝试优化数据库时,我试图确定此查询是否可以优化,因为它是我的数据库中最常用的查询。

id column被索引

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;

是否有办法让这个查询执行得更好?

你可以这样表达:

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)的索引。

最新更新