在MySQL中查询排名数字非常快?

时间:2018-11-10 04:30:19

标签: mysql database

数据库具有以下列: id,uuid,奖杯

为了获得基于奖杯的球员排名,我目前使用以下查询:

 SELECT rank FROM (SELECT (@num := @num +1) as rank, uuid FROM User, 
 (SELECT @num := 0) x ORDER BY trophies DESC) as TMP WHERE 
 uuid=UNHEX('7c6d37759dd749349f2c32303a367226');

但是,由于数据库的大小(300,000个播放器),查询大约需要1.3秒。

在MySQL中是否有更有效的方法来获得等级编号?


这是所要求的SHOW CREATE TABLE语句:

CREATE TABLE `User` (`id` int(11) NOT NULL AUTO_INCREMENT, 
`uuid` binary(16) DEFAULT NULL, `trophies` int(11) DEFAULT NULL, 
PRIMARY KEY (`id`), UNIQUE KEY `uuid` (`uuid`)
) ENGINE=InnoDB AUTO_INCREMENT=57917982 DEFAULT CHARSET=latin1

EXPLAIN语句:

enter image description here

1 个答案:

答案 0 :(得分:0)

找到解决方案:

此查询至少快10,000倍。

SELECT 1 + (SELECT COUNT(*) FROM User a WHERE a.trophies > b.trophies) AS rank 
FROM User b WHERE uuid = UNHEX('7c6d37759dd749349f2c32303a367226') ORDER BY 
rank LIMIT 1;