2011-09-16 7 views
0

ID、タイトル、コンテンツなどの投稿用のテーブルがあります。カウンタを追加しました。それは$ i + 1として更新されるたびに訪問の簡単なカウンターです。このメソッドでは、行を読み込んだ直後(単一のmysqlセッション内)に、訪問ごとにテーブルを更新します。mysqlの統計カウンタ用に別のテーブルを作成していますか?

外部キーとしてIDを持つポストテーブルに接続された別のテーブルとしてカウンタを分けるのは良い考えですか?この方法では、より軽量なテーブルを更新する方が高速ですが、2つのテーブルを読み込む必要があるたびに(投稿とその統計情報を表示します)。

+2

私は分かち合わないことをお勧めしますが、それはちょうどガット感です。情報は緊密に結合され、同じテーブルに保持されます。 – captainclam

+0

+1 @captainclam。これが2列の1つのテーブルであり、これが1:1のrelである場合、これを特別に分離する必要はありません。それを同じテーブルに残す。 – Icarus

答えて

1

私の答えは、あなたが何をしようとしているかによって異なります。私は、あなたがMySQLのシーン情報の背後にあるものをいくつか与えるつもりだから、いつカウンタテーブルを作るのがいいのか、カウンタテーブルを作らないのかを決めることができます。

MySQLにはさまざまなテーブルエンジンがあります。新しいテーブルを作成するときは、使用するエンジンを指定します。より一般的なものはMyISAMInnodbです。 MyISAMは、selectを実行するのに本当に良くて速く、Innodbは挿入を行うのが本当に速いです。両方の点で相違点がありますが、選択したエンジンが重要であることを理解しておくとよいでしょう。

上記に基づいて、通常読み込まれている行が大量のテーブルがある場合、そのテーブルをMyISAMとして保持し、Innodbを使用して別のカウンタテーブルを作成して更新し続けるのが理にかなっています。キャッシュを実装している場合は、別のテーブルのカウンタを更新するため、カウンタを更新するたびにテーブルデータのキャッシュをクリアしないため、このモデルがうまく機能するもう一つの理由です。

Innodbを使うべきだと主張する人もいるかもしれませんが、Innodbにはより多くの利点がありますが、両方の世界を最大限に活用できるレプリケーション戦略があるからです。

これはあなたに一般的な理解を与えてくれることを願っておりますので、深く掘り下げて回答を見つけることができます。さらに詳しい情報:http://www.mysqlperformanceblog.com/2007/07/01/implementing-efficient-counters-with-mysql/

+0

私は通常、RAMを節約するためにInnodbを無効にします。 MyISAMとInnodbの両方をさまざまな種類のパフォーマンスに使用することは素晴らしい考えです。有益な答えをありがとう。 – Googlebot

関連する問題