如果您正在实施博客应用程序 - 您更喜欢什么 -
在“POSTS”表中有一个存储评论数量的计数器
SELECT comment_count
FROM posts WHERE post_id = $id
...或从“评论”表中计算特定帖子的评论数量:
SELECT COUNT(*)
FROM comments
WHERE post_id = $id
哪一个更优化?
答案 0 :(得分:4)
我会使用第二种形式COUNT,直到我确定该特定SQL查询中的性能是一个问题。你在第一篇文章中建议的基本上是非规范化,当你确定你需要它时,这很好,很花哨。
无论如何,索引都可以让您快速执行第二个查询。
答案 1 :(得分:0)
让我们看看因素。
案例1:当您显示帖子时,您会显示评论。这意味着您可以全部检索它们,并在显示它们时对它们进行计数。在那种情况下,没有。
案例2:当您显示帖子时,您不会显示评论,而是显示“15条评论”的链接。在这种情况下,有一个等式。
实现计数:
一个评论的费用保存= 1插入+ 1个更新
一次展示的费用= 1阅读
博客显示的平均数量= D
平均评论数= C
因此,显示器D与注释C的比例是否正确:
C *(插入+更新)< D *(阅读)
因为D>>通常是正确的。 C,我建议额外更新的成本消失。
对于博客而言,这可能并不那么重要,但知道什么时候有很多表并且需要做出这些决定是一个关键的公式。