Я пытаюсь вычислить ранг символов в моей таблице.По какой-то причине, запрос выполняется всегда, когда я запускаю его с предложением order by.
У меня очень похожий запрос, выполняющийся на другом сервере с другой схемой, но по сути он делает то же самое, и он завершаетсяпочти мгновенноЯ совершенно не понимаю, почему этот запрос никогда не завершается и длится вечно.
Я индексирую почти все в таблице символов и все еще не везет.
KEY `accountid` (`accountid`),
KEY `party` (`party`),
KEY `ranking1` (`level`,`exp`),
KEY `ranking2` (`gm`,`job`),
KEY `idx_characters_gm` (`gm`),
KEY `idx_characters_fame` (`fame`),
KEY `idx_characters_job` (`job`),
KEY `idx_characters_level` (`level`),
KEY `idx_characters_exp` (`exp`),
Когда я не включаюORDER BY он работает очень хорошо и заканчивается мгновенно.Когда я это сделаю, он будет работать вечно.
В БД всего 28 000 символов, поэтому вычисление ранга не может быть таким интенсивным, особенно если предел равен 1.
SELECT c.name
, 1+(
SELECT COUNT(*)
FROM msd.characters as rankc
WHERE rankc.level > c.level
LIMIT 1
) as jobRank
FROM characters as c
JOIN accounts as a
ON c.accountid = a.id
WHERE c.gm = 0 AND a.banned = 0
ORDER BY c.`level` DESC, c.exp DESC
LIMIT 1
OFFSET 0;
Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ:
По сути, каждый персонаж имеет уникальную работу, и я хочу получить рейтинг работы этого персонажа.Порядок рейтингов по умолчанию - по уровню.Вот почему я делаю сравнение в моем jobRank SELECT.
Вот пример моего желаемого результата: желаемый результат