mysql - 在MySQL中极快地查询排名数?

标签 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

解释声明:

enter image description here

最佳答案

找到解决方案:

此查询至少快了 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/

相关文章:

php - 为什么 php api 在用 bind_result 重写代码后返回 null?

PHP 从数据库导出 CSV 表

database - 冗余关系?

java - 在客户端计算机上为 Java 桌面应用程序 (swing) 创建数据库

php - 如何用php连接到远程mysql数据库?

mysql - 在 MySQL 中比较时,转换为 varchar 或 varchar 为 int 更快吗?

php - Laravel 改变外键约束

sql-server - 从 View 中计算点数

java - 哪些方法可以减少 JDBC 线程暂停?

ruby-on-rails - Ruby on Rails : Proper Syntax for 2 dimensional Array in Database