2011-12-29 10 views
2

私は、毎日のビューを追跡するビューテーブルを持っています。この表を使用して、毎日および毎月の折れ線グラフを表示します。テーブルは次のようになります。これは、毎日のビューを追跡する良い方法ですか?

これは、すべての投稿について、365回のビュー(1年以内)を意味します。これは、もし私が1000の投稿を持っているということです。私は、ビューテーブルに365,000のエントリを持っています。私たちはいくつかの投稿とカウントを持っています。時には1日に10の投稿もあります。

私はpost_id,day,monthおよびyearにインデックスを付けました。

テーブルが指数関数的に増加するため、DBパフォーマンスの問題が発生する可能性がありますか?私は心配すべきですか?または私はうまくいくはずですか?

答えて

3

私はあなたが必要とするよりもあなた自身のために物事を難しくしていると思います。あなたは何も特別な利点がdaily_viewsに自動インクリメントIDを持つには存在しないdaily_viewsテーブルを参照する子テーブルを持っていない限り

create table daily_views 
(post_id int not null 
, view_date date not null 
, count int not null 
, primary key (post_id, view_date) 
, foreign key (post_id) references post(post_id) 
) 

:なぜあなたはちょうどこのように定義されたテーブルを持っていません。実際には、自然キーよりも有用性の低いインデックスのためのスペースを無駄にしているだけで、post_idview_dateです。

日、月、年を別々の列に分割する利点はありません。 1つのフィールドとして日付を格納すると、効率的で、月、月、年の日でなく、任意の日付範囲で簡単に集計できます。

この表形式を使用すると、パフォーマンスとスケーラビリティに関して懸念を軽減するために、使用される領域とレコードへのアクセスが最適化されます。あなたが生成している行の数に関して、私はあなたがそれについて心配する必要はないと思う。多くのデータベースには、数百万行のテーブルがあります。各行が可能な限りコンパクトであることを確認したいだけです。

+1

あなたはview_date ... post_dateではないと思います。 –

+0

"日、月、年を別々の列に分割する利点はありません。" - そうですね、2011年11月20日から2011年12月10日までのビューを合計するクエリを作成してください...そのような痛みです。 –

+0

かなり正しい@StephaniePage。私はそれに応じて私の答えを修正しました。ありがとう! –

関連する問題