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