优化rank()查询

时间:2016-10-24 10:49:27

标签: sql sql-server query-optimization

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

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

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;

有没有办法让这个查询更好地执行?

1 个答案:

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

我认为这会有更好的表现。