Быстро запросить рейтинг в MySQL? - PullRequest
0 голосов
/ 10 ноября 2018

База данных имеет следующие столбцы: 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');

Однако запрос занимает около 1,3 секунды из-за размера базы данных (300 000 игроков).

Есть ли более эффективный метод получения рангового числа в 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

1 Ответ

0 голосов
/ 10 ноября 2018

Нашли решение:

Этот запрос как минимум в 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...