私は、HighChartsチャート機能に戻るためにクエリを実行しているところに、約600万エントリのデータベースがあります。だから、帰国は5州、上記の文と各を言うことができますが、状態のIDがある...ストアドクエリを使用して大規模な(600万)行のMySQLを検索していますか?
foreach($states as $state_id) { //php code
SELECT //mysql psuedocode
sum(case when mydatabase.Year = '2003' then 1 else 0 end) Year_2003,
sum(case when mydatabase.Year = '2004' then 1 else 0 end) Year_2004,
sum(case when mydatabase.Year = '2005' then 1 else 0 end) Year_2005,
sum(case when mydatabase.Year = '2006' then 1 else 0 end) Year_2006,
sum(case when mydatabase.Year = '2007' then 1 else 0 end) Year_2007,
sum(case when mydatabase.Year = '$more_years' then 1 else 0 end) Year_$whatever_year,
FROM mytable
WHERE State='$state_id'
AND Sex IN (0,1)
AND Age_segment IN (5,4,3,2,1)
AND "other_filters IN (etc, etc, etc)
} //end php code
しかし、一度に様々な状態のために:私は長年にわたって縦方向に読み取る必要があるので、私はこのようなクエリを実行していますよ置換された。一方、年数は任意の年数にすることができ、性別(男性/女性/その他)および年齢区分およびその他の修飾子はフィルタに基づいて変化し続けます。クエリは長い(少なくとも30〜40秒)部分です。だから私が思ったことは、私が間違ってやっているのでなければ、実際に上記のクエリを結果とともに2番目のテーブルに格納し、最初に "メタクエリ"をチェックして "キャッシュされている"かどうかを確認し、 DBを読まなくても結果が得られます(非常に頻繁に更新されることはありません)。
これは良い方法ですか、表示されない可能性のある問題がありますか?
EDIT:db(duh)ではなくテーブルに変更されました。
テーブルの構造は次のとおりです。
id | Year | Sex | Age_segment | Another_filter | Etc
何もないより複雑なものと何かに参加していない以上。 id、Year、Sex、Age_segmentには現在キーがあります。
あなたの 'mydatabase'ファクトテーブルが実際にどのように見えるのかわからなくても、明確に答えるのは容易ではありません。あなたの質問を編集して、そのテーブルの定義を表示してください。 –
回転するものは忘れてしまいます。順序付けられた年と数の配列を返すだけで、プレゼンテーションレイヤー内のすべての表示物を処理します。 – Strawberry
@StrawberryあなたはGROUP BYを意味しますか、年数はどういう意味ですか? –