2010-11-30 5 views
0

私はクイズをしていますが、私はそれについて多くの選手を期待しています。クイズには固定数の質問があります。クイズシステムは、個々の質問をMySqlデータベースから1つずつ取り出して、ユーザーに表示することができます。あるいは、ログインしたときにすべての質問を取得して1つずつ表示することもできます。 2番目の方法は、SQLクエリの数が多いためにサーバーの負荷を大幅に軽減できますか?ここでは、同時にゲームをプレイしている500〜600人のユーザーについて話しています。どちらが良いですか:いくつかのSQLクエリまたは1つのSQLデータに大量のデータがありますか?

答えて

3

確かに知る唯一の方法は、両方の方法をベンチマークすることです。

私は最近、多数の小さなSQLクエリを少数の大きなクエリで置き換えることによって、パフォーマンスに重要なコードのスループットを10倍に向上させました。

0

よく索引付けされたデータベースは、単一のクエリでは全く問題がありません。これは私が好むものです。ボーナス:これらの小さなクエリはサーバーのクエリキャッシュに残っているため、再度要求された場合、より迅速に配信されます。

+0

私はPHPを使用しているので、SESSION変数に質問を格納することを考えています。あなたが話しているクエリキャッシュは何ですか?私は申し訳ありませんが、私は独学のプログラマーであり、技術専門用語は無知です。 – aakashbhowmick

+0

申し訳ありません。私が参照していた「クエリキャッシュ」は、MySQLサーバの内部メカニズムです。たくさん質問される質問(クエリ)はキャッシュされます。 –

0

数値によって異なります。あなたはすべての質問を表示していますか、1000のうち5つをランダムに選んでいますか?

質問の数が少ない場合は、1回のクエリでそれらを取得する方が良いでしょう。

質問の数が多い場合は、1回のクエリでそれらをフェッチすると大量のメモリが使用される可能性があるため、1つずつフェッチする方が効果的です。

+0

その15のクエリといいえ、ランダムにフェッチされません。 – aakashbhowmick

+0

それから間違いなく、単一のクエリでそれらを取得する方が良いでしょう。通常、データベースは各クエリを分析し、実行計画を準備する必要があります。したがって、データベースでは15回ではなく1回実行する方が優れています。 – Arsen7

0

質問の数が少ない場合は、いずれにしても少し違いがあります。また、質問の数が多い場合は、前後のネットワーク待ち時間のほとんどを避けるため、1回のクエリでフェッチする方が効率的です。

0

15を除いてを選択してください。各ユーザーの回答は個別ののクエリです。 DBサーバーの最大の利点は2つのバッチのクエリです:各ユーザーに対して1つの選択と1つの挿入。

理論上、500-600インサート/秒を受け取ることがあります。実際には挿入物が少なくなります。

とにかく、挿入ロックのオーバーヘッドがあるため、多数のクエリを避ける必要があります。

関連する問題