数据库查询 - 更好地计算行数或更好地保持增量计数器?

时间:2011-01-27 05:13:33

标签: mysql database-design querying

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

SELECT comment_count 
  FROM posts WHERE post_id = $id 

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

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

哪一个更优化?

2 个答案:

答案 0 :(得分:4)

我会使用第二种形式COUNT,直到我确定该特定SQL查询中的性能是一个问题。你在第一篇文章中建议的基本上是非规范化,当你确定你需要它时,这很好,很花哨。

无论如何,索引都可以让您快速执行第二个查询。

答案 1 :(得分:0)

让我们看看因素。

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

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

实现计数:

一个评论的费用保存= 1插入+ 1个更新

一次展示的费用= 1阅读

博客显示的平均数量= D

平均评论数= C

因此,显示器D与注释C的比例是否正确:

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

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

对于博客而言,这可能并不那么重要,但知道什么时候有很多表并且需要做出这些决定是一个关键的公式。