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%)
我想你正在寻找类似的东西:
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