1

3 つのデータベース テーブルがあり、

  1. Users ( ユーザーID、 ... )
  2. Entries(エントリーID、...)
  3. Likes (ユーザーID、エントリID、...)

私の質問は簡単です。LikeCountテーブル内の列を使用するか、テーブルから必要になるたびにステートメントをEntries使用する必要がありますか? どちらがより良い習慣ですか?SELECT COUNT(*)Likes

それはおそらくこの質問と重複しています:行の数を格納するか、単に行を数えますか? その質問に対する与えられた答えは、基本的には使用せずLikeCount、代わりに必要なたびにカウントすることです。ただし、次の質問には満足のいく答えが得られません。

  1. カウントをテーブルに保存することの悪い結果は何ですか
  2. アプリケーションで頻繁にいいね! をカウントする必要がある場合、これら 2 つの異なるアプローチのパフォーマンス分析は何ですか?

PS: 重要な場合は SQL Server 2008 を使用します

4

1 に答える 1

3

テーブルにカウントを格納することの悪い結果は何ですか:

このアプローチには 2 つの問題があります。

  1. Likes テーブルの変更に合わせてカウントを最新の状態に保つには、データベース トリガーまたはアプリケーション コードを使用する必要があります。

  2. #1 を間違えた場合は、LikeCount が実際にはいいねの数と一致しない可能性があるという事実に対処する必要があります。

アプリケーションで頻繁に「いいね!」をカウントする必要がある場合、これら 2 つの異なるアプローチのパフォーマンス分析はどのようなものですか。

Likes テーブルのインデックスを作成した場合、ほとんどのデータベース エンジンは、実際のテーブルを参照せずに COUNT(*) クエリに非常に迅速に応答できると思います。基本的に、インデックスでは、データベースは特定のキーに一致する行数を追跡します。これは、LikeCount と同じです。

次のようなクエリを作成する場合:

SELECT count(*) from Likes where EntryID=45;

次に、インデックスが EntryID にある必要があります。

ただし、次のようなクエリを作成する場合:

SELECT count(*) from Likes where EntryID=45 and deleted=False;

次に、インデックスをオンにする必要があります (EntryID、削除済み)。

于 2013-04-22T11:07:00.073 に答える