2009-04-12 11 views
0

私は、管理者が収集した膨大な量のデータを時間とともに可視化する必要があるアプリケーションへのレポート作成インターフェイスを構築する必要があります。現在、表は、1.5Mを保持している -大規模なデータセットでMySQLでレポートを生成する最も効率的な方法

は、Googleアナリティクスのようなものなど

を可視化する必要のあるデータのほとんどは、日時、「アクション」varchar型と他のフィルタ可能なデータが含まれている基本的なテーブルに座っていると考えてそれは毎日成長しています。

現時点では、1日ごとにグループ化されたフィルタを使用して簡単な選択を行っていますが、かなりうまく動作していますが、このようなデータをよりスマートで効率的に抽出する方法があるのだろうかと思いました。あなたは物事のカップルをやって起動することができます

乾杯

+0

わずか1.5万行にまで読みますか? "最適化"について心配する必要はありません。あなたは*長い*時間の間はうまくいくはずです。 – kquinn

答えて

2

1)生データと要約データの2つの層。生データの場合、インデックスは役に立たない可能性があります。ほとんどの場合、集計を実行しているため、完全な表スキャンが必要です。もしそうでなければ再編成してください。そうすればより速くなります。

2)集計を取り出し、自動的に生成し、集計データからレポートを実行します。これらのサマリテーブルのインデックスを作成してください!

3)結合を避けてください。グループ化の結果を集約し、実体化し、集約した結果を結合する。

4)パーティション。ある日のデータを、別の日のデータと分けて保存してください。必要に応じて自動化されたテーブル作成スクリプトを作成します(あなたの視点に応じて、大人 - または多機能 - データベースはより分かりやすい方法でこれを行うために "パーティショニング"と呼ばれるものを提供します)。

5) "データウェアハウス" http://en.wikipedia.org/wiki/Data_warehouse

1

  1. 彼らは任意のテーブルスキャンを行うことはありませんので、あなたはすべてのフィルタのインデックスを追加していることを確認します。

  2. クエリプランアナライザを使用して、最適化が必要な場所がないことを確認します。

  3. テーブルにdatetime stampがあるので、将来的にはパーティション化が役立ちます。

幸運。

0

多くの一般的なクエリが期待できます。おそらく、生成される可能性のあるフィルタの固有の組み合わせの数に比べて少数です。これを使用してデータをコンパニオンテーブルに「圧縮」し、この収集プロセスを夜間に実行することができます。

関連する問題