「スコア」列を持つリーダーボードがあります。また、スコア列にはインデックスがあり、500 万行であっても、トップ 10 または任意の数のスコアを切り出して、テーブルをスコアで非常に迅速に並べ替えることができます。
ただし、私が本当に望んでいるのは、リーダーボードにプレイヤーの「ランク」も表示することです。私はいくつかの方法を試しましたが、100000 行を超えるものを処理する場合、どれもスタックしていないようです (何百もの現在のユーザーが予想されることを考えると、これは長すぎるため、0.5 秒以上かかり始めます)。
私は現在、次のクエリを使用して 1 つのユーザー ランクを決定し、出力でこれより上のユーザーを単純にインクリメントしていますが、非常に遅いです。
SELECT tro.score, tro.userId,
(
SELECT count(*)
FROM scoreboard tri
WHERE tri.score >= :score
) AS rank
FROM test_tracks tro
WHERE userId = :userID");
ユーザーがスコアボードに新しいスコアを挿入するたびにランクを「キャッシュ」するランキング テーブルを生成することを考えていますが、これを生成するだけでも長い時間 (数分、場合によっては数時間) かかります。
ランキングを確立するための良いガイドやコツを知っている人はいますか? できれば結果もページ化できるようにしたいのですが、当面はランクを確立するだけでも十分です!
前もって感謝します!