2

如果你正在实现一个博客应用程序——你更喜欢什么——
在“POSTS”表中有一个计数器来存储评论的数量

SELECT comment_count 
  FROM posts WHERE post_id = $id 

...或计算“评​​论”表中特定帖子的评论数量:

SELECT COUNT(*)
  FROM comments 
 WHERE post_id = $id

哪个更优化?

4

2 回答 2

4

我会使用第二种形式,COUNT,直到我确定该特定 SQL 查询中的性能是一个问题。您首先建议的是非规范化,当您确定自己需要它时,这很好而且很花哨。

无论如何,索引将允许您非常快速地执行第二个查询。

于 2011-01-27T05:17:00.203 回答
0

让我们看看因素。

情况 1:当您显示帖子时,您会显示评论。这意味着您可以全部检索它们并在显示它们时对它们进行计数。在那种情况下,没有。

情况 2:当您显示帖子时,您不会显示评论,而是显示“15 条评论”的链接。在这种情况下,有一个等式。

实现计数:

保存一条评论的成本 = 1 次插入 + 1 次更新

一篇文章展示的成本 = 1 阅读

平均博客显示次数 = D

平均评论数 = C

因此,对于显示器 D 与评论 C 的比例,这是真的:

C *(插入 + 更新)< D *(读取)

由于 D >> C 通常是正确的,因此我建议该额外更新的成本消失。

这对于博客来说可能不是那么重要,但它是一个重要的公式,可以知道您何时有很多表并需要做出这些决定。

于 2011-01-27T06:05:26.903 回答