2012-04-01 22 views
2

私はPHP/MySQL統計ログプログラムを開発中で、最良のMySQL DB構造を探しています。今日、昨日、毎月のログのMySQLテーブル設定

訪問者が日付の統計情報(最新の20項目)を見ることができる部分がありますが、今日の全体的な、昨日の全体的な、過去7日間の全体的および過去30日間の全体統計を見ることができます。

私が取得したデータから、リアルタイム統計は60秒ごとに更新ごとに少なくとも10個の新しいエントリで更新されます。

は次のように... ...二つのテーブル設定への正しい全体的なアーカイブとして機能するように、「今日の」統計と別として動作する一つの私のロジックです:

todays_stats
ID
from_url
ENTRY_DATE

overall_stats
ID
from_url
ENTRY_DATE

次にダブル各新しいエントリの挿入が、cronジョブを経由して、毎晩深夜にtodays_statsを切り捨てますか?

これを行うより効率的な方法がありますか?

+1

テーブルが1つの方が良いでしょう。次に、クエリを使用して必要なデータを取得します。 GROUP BYを使用して、毎日または毎週またはその他の統計情報を取得できます。 –

答えて

1

日単位の統計行数、履歴データを削除するかどうか、およびインデックスの量によって異なります。履歴データを削除する必要があり、大量の統計データを含む7〜8個のインデックスがあるため、データを日単位のテーブルに分けてデータを取得するためのストアドプロシージャを作成します(最終日、過去7日間、過去30日間など)。テーブルをドロップするほうがはるかに高速ですDELETE FROM table WHERE index=6-month-old-data

0

私は最善の方法は、あなたが全体の統計のために別のテーブルを持っていますし、深夜にあなたが

INSERT INTO `overall` SELECT * FROM `current` 
で全体のテーブルに現在のすべてのデータを挿入します、現在のデータセットを保持する一つのテーブルを維持することだと思います

クエリ。その後、データのコピーが成功したら、現在のテーブルを切り捨てます。

+0

ありがとうアレックス!今晩サンプルデータを試してみて、それがどのように実行されるか見てみましょう。 –

関連する問題