每次 COUNT() 评论 vs 在 count_comments 列中缓存 vs 使用另一种类型的缓存

COUNT() comments each time vs cache in count_comments column vs use another type of cache

我有一个共同的疑问。

猜猜我正在用 post 创建一个社交网络或博客,每个 post 都有评论。

如果我想对 post 的列表进行分页和过滤,并显示每个 post

的评论数量

我是否应该在我的 posts table 中添加一个 count_comments 列(就像 WP 所做的那样)并在那里缓存评论数量(即每次有人发表评论时如果有人添加 1删除 count_comments 列的评论 sub 1)

我是否应该每次都执行 SUBSELECT 来计算评论数量,然后用另一种形式缓存结果或缓存

或者你有什么推荐的?

绝对使用触发器缓存它们,为将来安全高效。但请记住,您不需要分页计数,可能只是为了在某些统计信息中显示计数

简而言之:两者都可以,并且两种变体各有优缺点。

您几乎肯定会对这两种方式都有争论。

如果您经常需要评论计数,并且需要大量 system/application 资源才能通过简单的 sql 语句获取该值(p.e。按该值排序可能是一种痛苦),将值存储在像 WordPress 那样的字段中是一种方法。

如果您不经常需要评论计数,and/or 获取值并不需要大量资源(SELECT COUNT(*) FROM yourcommenttable WHERE yourpostid = whatever 对于大多数系统来说应该不会太难),您可能会受益更多,同时避免使值与帖子中的实际评论保持同步的问题。