[英]How can I optimize my query (rank query)?
在过去的两天内,我一直在询问有关Mysql中排名查询的问题。 到目前为止,我对
这是昨晚我的问题的链接
您可能会注意到,btilly的查询非常快。
这是一个查询,它仅根据btilly的查询获得其排名的一行。
set @points = -1;
set @num = 0;
select * from (
SELECT id
, points
, @num := if(@points = points, @num, @num + 1) as point_rank
, @points := points as dummy
FROM points
ORDER BY points desc, id asc
) as test where test.id = 3
上面的查询使用子查询..so ..我担心性能。
我还能使用其他更快的查询吗?
表点
id points
1 50
2 50
3 40
4 30
5 30
6 20
不要惊慌于子查询。 子查询并不总是很慢-仅在某些情况下。 您的查询的问题在于它需要进行全面扫描 。
这是一个应该更快的替代方法:
SELECT COUNT(DISTINCT points) + 1
FROM points
WHERE points > (SELECT points FROM points WHERE id = 3)
在id
上添加一个索引(我猜您可能在这里想要一个主键),在points
上添加另一个索引,以使此查询有效地执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.