Найти 10 лучших игроков — mysql

У меня есть таблица кодов, которая скоро пересечет 500 000 строк фиктивных данных. Стол используется для хранения очков, набранных игроками в игре. Ниже приведены столбцы, представленные в таблице.

questionid bigint,
playerid varchar(20),
playerscore float,
questionlevel enum('EASY', 'MODERATE', 'HARD'),
questionstatus enum('PENDING','SOLVED'),
lastmodified datetime,
created datetime
Primary key (questionid, playerid)

Пример данных:

+------------+----------+-------------+----------------+
| questionid | playerid | playerscore | questionstatus |
+------------+----------+-------------+----------------+
| 1          | 1        | 5           | PENDING        |
+------------+----------+-------------+----------------+
| 1          | 2        | 10          | SOLVED         |
+------------+----------+-------------+----------------+
| 3          | 1        | 10          | SOLVED         |
+------------+----------+-------------+----------------+
| 2          | 3        | 10          | SOLVED         |
+------------+----------+-------------+----------------+

Каждый вопрос имеет несколько баллов, связанных с ним, и когда игрок правильно решает задачу, ему присуждаются баллы, и запись вносится в таблицу кодовых баллов, а вопросительный статус для этой записи устанавливается на РЕШЕНО. Если игрок частично решил проблему, то некоторая часть от общего количества очков присуждается игроку, и в таблицу вносится запись с вопросом для состояния, установленным в ОЖИДАНИЕ.

Игрок может решить данную проблему любое количество раз, пока статус находится в состоянии ожидания, чтобы улучшить свой счет. После изменения статуса на «РЕШЕНО» обновление баллов больше не производится. Хотя игрок все еще может решить проблему для практики.

Теперь основная часть проблемы:
Найдите 10 лучших игроков (в порядке убывания) для каждого уровня вопроса (ЛЕГКО, УМЕРЕННО, ЖЕСТКО)

Используя следующий запрос, вы найдете 10 лучших игроков уровня HARD:

SELECT playerid, SUM(playerscore) AS score FROM codescore
WHERE questionlevel = 'HARD'
GROUP BY playerid
ORDER BY score DESC
LIMIT 10;

Будет ли приведенный выше запрос работать хорошо, если записи в таблице пересекают строки размером 500 000 или 1 миллион в производственной среде?
Есть ли лучшее решение для этого типа проблемы или лучший запрос, который можно использовать для выполнения этой задачи?

[Backend: использование MySQL и CodeIgniter]

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]