0

私はゲームを持っています。各ラウンドプレイヤーは賞金を得て、賞金総額を計算します。 私は、このようなスキーマを使用します。ゲーマーの評価計算のためのデータベース/クエリ設計の助けが必要

1)テーブルgame_result(user_idは、賞品、game_dateは)別にゲームの結果を格納するために使用された(私は私の統計のためにそれを必要とする)

2)テーブルの評価(USER_ID、total_prize 、total_games)は、評価データとtotal_prizeを格納するために使用されます。合計ゲーム値は各ゲームの最後に更新されます。

3)ゲーム中に表示するために、ユーザーの賞金とポジションを速く評価する必要があります。今、私はこのクエリ

SET @rank=0; 
SELECT @rank:[email protected]+1 AS rank, user_id, total_prize, total_games FROM rating order by total_prize where user_id = ? 

のようなものを使用しますが、それは、各クエリの評価表をリゾートや遅すぎます。問題は、各ゲームの後に1人のプレイヤーが(total_prize、total_gamesで)1行だけ変更されますが、新しいオーダーの場所を見つけるためには、テーブル全体を使う必要があり、パフォーマンスは実現できません。

この操作のパフォーマンスを向上させるためにテーブルを再編成することはできますか?

ありがとうございます!

答えて

1
SELECT COUNT(*) 
FROM rating 
WHERE total_prize <= (SELECT total_prize FROM rating WHERE user_id = ?) 

(あるいはそれをカウントし、その後、別のクエリを実行し、ユーザーのためのtotal_prize、プラスあなたが必要とする他の列を取得します。)

もちろんのtotal_prizeにインデックスを持っていることを確認してください。

(あなたがランクの意味に応じて、代わりに=必要な場合があります)

+0

興味深い、Ariel。私はこのクエリを試し、パフォーマンスを比較します。 – dbf

関連する問題