Почему вы не хотите делать 'ORDER BY char.lvl' каждый раз, когда кто-то посещает страницу "Рейтинг"?Обычно такие операции выполняются в реляционной базе данных.
Денормализация (дублирование данных / индексов по соображениям производительности) - это то, что вы предлагаете.Дублирование релевантных данных в вашей таблице «ранжирования» будет работать, но потребляет больше места.
Теперь нет ничего плохого в том, чтобы отменить нормализацию или использовать триггеры, но я не вижу реальной причины добавить этосложность (но вам лучше знать - пробовали ли вы это, и производительность оказалась ниже ожидаемой?).
Вы можете создать индекс для столбца lvl, который значительно ускорит запросы для сортировки.(См. https://dev.mysql.com/doc/refman/8.0/en/create-index.html для получения дополнительной информации об индексах).Было бы быстрее обновить вторичный индекс, подобный этому, и потреблять меньше памяти / процессора, чем перестраивать таблицу ранжирования.
Если дополнительный индекс окажется недостаточным, то триггер + дополнительная таблица можеттренировка хорошо ...
Под "физически отсортированным" я полагаю, вы имеете в виду наличие первичного ключа (в отличие от вторичного индекса).Но что будет включать этот ключ?Возможно, lvl + никнейм?Я бы по-прежнему склонялся к индексу на lvl + псевдоним, если бы это было так.
И это вызывает некоторые дополнительные вопросы ... Могут ли пользователи изменить свой ник?Новый уровень также увеличит их опыт?