У меня есть вопрос о создании «Списков рекордов».
Допустим, у меня есть онлайн-игра с 1 000 000 активных пользователей. У каждого пользователя есть баллы от 0 до X. Теперь я хочу показать рейтинг-лист. Было бы безумно показывать все миллионы записей на одной странице, чтобы разделить их на Y страниц (100 записей на каждой странице => 10.000 страниц).
Я не совсем уверен, как решить это.
в одном SELECT, получить результат и найти текущего пользователя с циклом for и показать эту конкретную страницу. (но все остальные 999.900 записей будут сохранены в ОЗУ, даже если они не отображаются). Для изменения страницы я мог бы просто использовать данные результата без второго вызова базы данных. (Так что меня не волнуют изменения очков за это время)
SELECT UserName, UserID, Points FROM UserAccount ORDER BY Points;
2.1, если это действительно лучшая производительность
2.2 Как получить правильную стартовую страницу, потому что у меня есть только очки пользователя, но не его место
Так как я мог решить эту проблему. Я действительно не знаю, с чем может справиться mysql. Более мелкие звонки лучше, чем один огромный звонок.
Могу ли я сохранить огромные данные результатов?
Второе решение будет обновлять все измененные точки с каждым изменением страницы, но я больше беспокоюсь о производительности, чем всегда обновляю данные списка.
Спасибо за помощь!
Markus
Используйте нумерацию страниц. В SQL это предложение «limit»:
SELECT UserName, UserID, Points FROM UserAccount ORDER BY Points LIMIT 0, 20;
Приведенный выше запрос вернет только первые 20 строк исходного выделения.
Вы можете передать параметры страницы через get, например: highscore.php? Page = 1 или? Page = 2 и так далее.
Других решений пока нет …