У меня есть игра, в которой за каждый раунд игрок получает приз и рассчитывается рейтинг по общему призу.
Я использую такую схему:
1) таблица game_result (user_id, приз, game_date) используется для отдельного хранения результатов игр (мне это нужно для статистики)
2) таблица рейтинга (user_id, total_prize, total_games) используется для хранения рейтинговых данных, а total_prize, значения total_games обновляются в конце каждой игры
3) Мне нужно быстро найти общий приз и позицию пользователя в рейтинге (чтобы отобразить его во время игры). Теперь я использую вид этого запроса
SET @rank=0;
SELECT @rank:=@rank+1 AS rank, user_id, total_prize, total_games FROM rating order by total_prize where user_id = ?
, но он восстанавливает рейтинг таблицы для каждого запроса и работает слишком медленно. Проблема в том, что после каждой игры изменяется только одна строка (с total_prize, total_games) одного игрока, но чтобы найти его новое место для заказа, мне нужно пересмотреть всю таблицу, а производительность не достижима.
Можно ли реорганизовать таблицы для повышения производительности этой операции?
Спасибо!