繁体   English   中英

如何优化查询(排名查询)?

[英]How can I optimize my query (rank query)?

在过去的两天内,我一直在询问有关Mysql中排名查询的问题。 到目前为止,我对

  1. 查询表中的所有行并按其顺序排序。
  2. 仅查询其排名的一行

这是昨晚我的问题的链接

如何获得排行榜?

您可能会注意到,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM