MYSQL データベース テーブルからいくつかの分析データを表示する Web アプリに取り組んでいます。総ユーザー数は最大で10,000人程度を想定しています。このテーブルには、ユーザーごとに数百万のレコードが含まれます。
各ユーザーに独自のテーブルを提供することを検討していますが、さらに重要なことは、データ取得を最適化する方法を見つけたいということです。
SELECT COUNT
特定の日の一連のクエリを使用して、データベース テーブルからデータを取得します。以下に例を示します。
SELECT * FROM
(SELECT COUNT(id) AS data_point_1 FROM my_table WHERE customer_id = '1' AND datetime_added LIKE '2013-01-20%' AND status_id = '1') AS col_1
CROSS JOIN
(SELECT COUNT(id) AS data_point_2 FROM my_table WHERE customer_id = '1' AND datetime_added LIKE '2013-01-20%' AND status_id = '0') AS col_2
CROSS JOIN ...
過去 30 日間のデータを取得したい場合、クエリは上記の 30 倍の長さになります。同様に 60 日など。ユーザーは、30、60、90 などの日数とカスタム範囲を選択できます。
時系列グラフのデータが必要です。明確にするために、毎日のデータは、数千から数百万のレコードに及ぶ可能性があります。
私の質問は:
これは、このデータを取得する最もパフォーマンスの高い方法ですか?それとも、必要なすべての時系列データを 1 つの SQL クエリで取得するためのより良い方法はありますか?! ユーザーが過去 2 年間のデータ、つまり 1,000 行を超える可能性のある MySQL クエリを必要としている場合、これはどのように機能するのでしょうか?!
サーバーを減らすために、取得したデータを(たとえばmemcacheを使用して)1時間以上キャッシュすることを検討する必要があります(これは分析データであるため、実際にはリアルタイムである必要がありますが、変更がない場合でも同じデータをクエリするサーバー)?!
任意の支援をいただければ幸いです。