我有三个数据库表,
Users
(UserID,...)Entries
(EntryID,...)Likes
(UserID,EntryID,...)我的问题很简单。我应该在表LikeCount
中使用Entries
列,还是每次从SELECT COUNT(*)
表中需要时使用Likes
语句?哪一个是更好的做法?
这个问题可能重复:storing the count of rows or just count the rows?该问题的答案基本上不使用LikeCount
,而是每次需要时计算。但是,他们没有对以下问题给出满意的答案:
PS:如果重要的话我使用SQL Server 2008
答案 0 :(得分:3)
在表格中存储计数的不良后果是什么:
这种方法存在两个问题:
您必须使用数据库触发器或应用程序代码,以便在Likes表更改时使计数保持最新。
如果你错了#1,你必须处理LikeCount实际上可能与喜欢的数量不匹配这一事实。
如果我需要在我的应用程序中非常频繁地计算喜欢,那么这两种不同方法的性能分析是什么:
我相信如果你为Likes表创建了一个索引,大多数数据库引擎都能够非常快速地回答COUNT(*)查询,而无需引用实际的表。基本上,在索引中,数据库会跟踪与给定键匹配的行数,这与您的LikeCount相同。
如果您要编写如下查询:
SELECT count(*) from Likes where EntryID=45;
然后你的索引必须在EntryID上。
但是,如果你打算写一个像这样的查询:
SELECT count(*) from Likes where EntryID=45 and deleted=False;
然后你的索引必须打开(EntryID,删除)。