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

标签 mysql caching count

我有一个共同的疑问。

猜猜我正在创建一个包含帖子的社交网络或博客,并且每个帖子都有评论。

如果我想对帖子列表进行分页和过滤并显示每个帖子的评论量

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

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

或者您有什么建议?

最佳答案

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

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

如果您经常需要评论计数,并且需要大量系统/应用程序资源才能通过简单的 sql 语句获取该值(例如,按该值排序可能会很痛苦),请像 WordPress 那样将值存储在一个字段中是一种方法。

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

关于mysql - 每次 COUNT() 评论 vs 在 count_comments 列中缓存 vs 使用另一种类型的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30630593/

相关文章:

php - 违反完整性约束 : 1048 Column 'taggable_id' cannot be null

mysql - 在 ruby​​ on rails 中减去两个日期

java - Spring @Cacheable 除非由自定义 key 生成器创建的属性引用 key

linux - linux 统计文件出现次数

mysql - MySQL是否支持原子选择和一起更新

php - 如何在 Openshift 中打开数据库连接?

python - DRF-Extension缓存忽略查询参数

android - 在磁盘上使用 picasso 加载图像

c - 使用指针在递归函数中创建一个计数器?

MySQL 计数变化