SQL Server排名查询优化

Udi*_*dan -1 sql t-sql sql-server query-optimization ranking

我正在尝试优化查询以从DB获取特定国家/地区的用户的排名.目前看来效率很低.

我正在努力确定可以采取哪些措施来改进它.

这是当前的SQL:

SELECT COUNT(*) + 1
FROM leaderboard lb, users u
WHERE u.country = 'United States' 
  AND lb.id = u.id 
  AND lb.score + 1 > (SELECT lb2.score 
                      FROM leaderboard lb2
                      WHERE lb2.id = some_user_id);
Run Code Online (Sandbox Code Playgroud)

细节:

Users 表:

  • id 是主键
  • country 列已编入索引

Leadeboard 表:

  • id 是主键
  • score 列已编入索引

在此输入图像描述

执行计划显示2个警告:

没有统计数据的列:[dbo].[排行榜] .id(成本23%)

没有统计数据的列:[dbo].[用户] .id(成本28%)

kjm*_*erf 5

我想你正在寻找类似的东西:

SELECT u.id AS user_id, u.country, lu.score, RANK() OVER (ORDER BY lu.score DESC) AS rnk
FROM users u
INNER JOIN leaderboard lu ON u.id = lu.id
WHERE u.country = 'United States'
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看演示:http://rextester.com/KHM76159