数据库具有以下列: 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
解释声明:
最佳答案
找到解决方案:
此查询至少快了 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;
关于mysql - 在MySQL中极快地查询排名数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53236003/