0

本当に遅いことがわかっている mysql でいくつかのリクエストを実行したいと思います。

私は3つのテーブルを持っています:

ユーザー:

id, username, email

質問:

id, date, question

答え

id_question, id_user, response, score

そして、すべての時間または特定の時間 (先月など) について、最高のスコア (すべてのスコアの合計) を持つ上位 X ユーザーのような統計を行いたいと考えています。または、100 番目から 110 番目の範囲のユーザーである可能性があります。

数千のユーザーと数百の質問があるため、スコアの合計で並べ替え、特定の範囲に制限し、日付に応じていくつかの質問のみを選択する必要があるため、リクエストは非常に長くなる可能性があります...

リクエストを最適化する方法があれば教えてください。

4

2 に答える 2

1

他に選択肢がない大量のデータがある場合は、毎日/毎週または毎月のデータを何らかの方法で要約する新しいテーブルを作成して最適化することができます. ユーザーのスコアを週ごとに集計し、その週の日付または月ごとにスタンプを集計することもできます。クエリが高速に動作する限り、合計の範囲が長くなります。

于 2012-10-30T11:17:34.530 に答える
1

アーカイブされた統計の場合、移動しないランキング (昨年、先月、最終日) を格納するテーブルを作成できます。そのようなテーブルで可能な限り多くの統計を計算し、id_user、date、type_of_ranking にインデックスを配置してみてください...

サブクエリをできるだけ制限するようにしてください。

于 2012-10-30T10:00:02.847 に答える