0

データベースに約 50,000 人の Web サイトがあります。統計を作成するには、3 つのテーブルからデータを取得して結合する必要があります。より多くのデータが毎日入ってくるため、ページはますます遅くなります。必要なすべてのデータを結合するテーブルを作成し、そのテーブルから php を実行できるかどうか疑問に思っていました。新しいデータが含まれるように、テーブルの作成を 1 時間ごとまたはその他の内部セットで実行できれば素晴らしいことです。これは可能であり、賢明ですか?いくつかのリソースを教えてもらえますか?

データベースにmysqlを使用しています。

ありがとう!

ここには 3 つのテーブルがあります。村のレベル、居住者のレベル、そしてそれらが存在しない場合は結果を含む不在のテーブルです。

          SELECT EU, sum(TF) as TFsum, sum(TT) as TTsum, sum(KID) as Nkid, 
          sum(ADULT) as Nadult

                    from 
                (select EU, b.name as Person,

                    CASE
                       WHEN b.RIGHT_EYE_TF=1 THEN 1
                       WHEN b.LEFT_EYE_TF=1 THEN 1
                       WHEN c.RIGHT_EYE_TF=1 THEN 1
                       WHEN c.LEFT_EYE_TF=1 THEN 1
                       ELSE 0
                     END AS TF,
                    CASE
                       WHEN b.RIGHT_EYE_TT=1 THEN 1
                       WHEN b.LEFT_EYE_TT=1 THEN 1
                       WHEN c.RIGHT_EYE_TT=1 THEN 1
                       WHEN c.LEFT_EYE_TT=1 THEN 1
                       ELSE 0
                     END AS TT,

                    CASE
                      WHEN AGE <= 9 THEN 1
                      ELSE 0
                    END AS KID,
                    CASE
                      WHEN AGE >= 15 THEN 1
                      ELSE 0
                    END AS ADULT 


                    from 
                    villagedb a LEFT JOIN residentdb b
                    ON
                    a.CLUSTER = b.RES_CLUSTER
                    LEFT JOIN
                    absentdb c
                    on
                    b.RES_HOUSEHOLD_ID=c.RES_HOUSEHOLD_ID AND 
                    b.NAME = c.NAME
                    GROUP BY EU, b.name

                    ) S

                    GROUP BY EU
4

3 に答える 3

0

次のことを試してください。

  1. インデックスを追加する
  2. テーブルを正規化します(パフォーマンスを向上させるには、テーブルを少なくとも最初の3つの正規形にする必要があります。さらに正規化したい場合は、BCNFを使用できます。

共通のフィールドを持つ2つのテーブルからテーブルを作成できます。テーブルを結合する代わりに、必要なデータを選択するキャッシュテーブルのようなものがあります。

于 2013-01-24T14:37:23.853 に答える
0

ここに 2 つの問題があります。

  • 最初のものはすでに指摘されています-クエリとデータベースを最適化します(インデックス、非正規化、ビュー、ストアドプロシージャなど)
  • 2 番目 - トップ 100 のみのような限定された結果を表示します (ページネーションと言います)
于 2013-01-24T14:56:55.633 に答える
0

大量のデータで統計を作成する必要がある場合、多くの場合、最善の方法はテーブル内のデータの非正規化を行うことです。

簡単な英語では、新しいテーブルを作成し、結合から取得するデータを入力し、古いテーブルにデータを挿入するときに、このテーブルにもデータを入力します。このようにして、レポートを大幅に高速化できます。結合は、特に大量のデータでは高速ではないため、データを複製するとはるかに高速になりますが、データを常に同期させるには、さらに努力する必要があります。

于 2013-01-24T14:18:30.370 に答える