1

我有三个数据库表,

  1. Users ( 用户身份, ... )
  2. Entries(条目ID,...)
  3. Likes (用户 ID、条目 ID、...)

我的问题很简单。我应该使用LikeCount表中的列Entries还是SELECT COUNT(*)每次需要Likes表中的语句时都使用它?哪个是更好的做法?

它可能与这个问题重复:存储行数还是只计算行数?该问题的给定答案基本上是LikeCount每次需要时都不要使用和计数。但是,他们没有对以下问题给出令人满意的答案:

  1. 在表中存储计数的不良后果是什么
  2. 如果我需要在我的应用程序中非常频繁地计算喜欢,这两种不同方法的性能分析是什么

PS:如果很重要,我使用 SQL Server 2008

4

1 回答 1

3

在表中存储计数的不良后果是什么:

这种方法有两个问题:

  1. 您必须使用数据库触发器或应用程序代码在 Likes 表更改时使计数保持最新。

  2. 如果你弄错了#1,你必须处理 LikeCount 可能实际上与喜欢的数量不匹配的事实。

如果我需要在我的应用程序中非常频繁地计算喜欢,这两种不同方法的性能分析是什么:

我相信,如果您为 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 回答