Mysql COUNT()每次注释vs在COUNT_comments列中缓存vs使用另一种类型的缓存

Mysql COUNT()每次注释vs在COUNT_comments列中缓存vs使用另一种类型的缓存,mysql,caching,count,Mysql,Caching,Count,我有一个共同的疑问 我猜我正在创建一个包含帖子的社交网络或博客,每个帖子都有评论 如果我想对帖子列表进行分页和筛选,并显示每篇帖子的评论数量 我是否应该将count_comments列添加到我的posts表中(像WP一样)并将评论量缓存在那里(即,如果有人删除count_comments列中的评论子1,则每次有人评论添加1) 我是否应该执行子选择来计算每次的注释量,然后用另一个表单或缓存缓存结果 或者你有什么建议?一定要使用触发器缓存它们,为将来安全高效。但是请记住,分页时不需要计数,可能只是为

我有一个共同的疑问

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

如果我想对帖子列表进行分页和筛选,并显示每篇帖子的评论数量

我是否应该将count_comments列添加到我的posts表中(像WP一样)并将评论量缓存在那里(即,如果有人删除count_comments列中的评论子1,则每次有人评论添加1)

我是否应该执行子选择来计算每次的注释量,然后用另一个表单或缓存缓存结果


或者你有什么建议?

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

一定要使用触发器将其缓存起来,以确保将来安全高效。但请记住,分页时不需要计数,可能只是在某些统计信息中显示计数,简而言之:两者都可以工作,两种变体各有优缺点

你几乎肯定会有两种观点的争论

如果您经常需要注释计数,并且需要大量的系统/应用程序资源才能通过简单的sql语句获得该值(也就是说,按该值排序可能会很麻烦),那么将该值存储在像WordPress那样的字段中就是一种方法


如果您不经常需要注释计数,和/或从CommentTable中获取值不需要很多资源(
SELECT count(*),其中yourposted=which
对于大多数系统来说应该不会太难),您可能会从中受益更多,同时避免将值与帖子中的实际评论保持同步的问题

简而言之:两者都会起作用,两种变体各有优缺点

你几乎肯定会有两种观点的争论

如果您经常需要注释计数,并且需要大量的系统/应用程序资源才能通过简单的sql语句获得该值(也就是说,按该值排序可能会很麻烦),那么将该值存储在像WordPress那样的字段中就是一种方法


如果您不经常需要注释计数,和/或从CommentTable中获取值不需要很多资源(
SELECT count(*),其中yourposted=which
对于大多数系统来说应该不会太难),您可能会从中受益更多,同时避免将值与帖子中的实际评论保持同步的问题

这完全取决于要处理的数据量。这个问题无法回答,因为它实际上太宽泛了。如果您要求推荐,我甚至不会使用MySQL,我会尽可能避免子选择(子选择在每一行上运行,它们非常慢,您可以轻松地死锁多个表)。这取决于您要处理的数据量。这个问题无法回答,因为它实际上太宽泛了。如果您要求推荐,我甚至不会使用MySQL,我会尽可能避免子选择(子选择在每一行上运行,它们非常慢,您可以轻松地死锁多个表)。这取决于您要处理的数据量。这个问题无法回答,因为它实际上太宽泛了。如果你要求推荐,我甚至不会使用MySQL,我会尽量避免子选择(子选择在每一行上运行,它们非常慢,你可以很容易地死锁几个表)。我需要显示最受欢迎的帖子(那些评论较多的帖子)尝试计数方法时,我必须在ORDER BY中使用SUBSELECT来实现计数子查询的简单性,它只需要comments.post_id=posts.id WHERE条件。另一方面,我需要每个视图中的计数(帖子列表和详细信息),所以我仍然不确定什么是获得额外字段的最佳方式,这就是为什么我在回答中提到排序。但同样,这两种方法都是有效的。我需要显示最受欢迎的帖子(那些评论较多的帖子)尝试计数方法。我必须按顺序使用子选择,以实现计数子查询的简单性,它只需要comments.post_id=posts.id WHERE条件。另一方面,我需要每个视图中的计数(帖子列表和详细信息),所以我仍然不确定什么是获得额外字段的最佳方式,这就是为什么我在回答中提到排序。但同样,这两种方法都是有效的。我需要显示最受欢迎的帖子(那些评论较多的帖子)尝试计数方法。我必须按顺序使用子选择,以实现计数子查询的简单性,它只需要comments.post_id=posts.id WHERE条件。另一方面,我需要每个视图中的计数(帖子列表和详细信息),所以我仍然不确定什么是获得额外字段的最佳方式,这就是为什么我在回答中提到排序。但同样,这两种方法都是有效的。如果我使用触发器,我的数据库将不可移植,应用程序逻辑将被划分,我是否也可以使用事件系统和我正在使用的框架(Laravel)向计数列添加或减去?我想你可以,但是,如果我使用触发器,那么它的可靠性可能会降低。我的数据库将不可移植,应用程序逻辑将被划分,我是否也可以使用事件系统和我正在使用的框架(Laravel)对计数列进行加或减?我想你可以,但是,如果我使用触发器,那么它的可靠性可能会降低。我的数据库将不可移植,应用程序逻辑将被划分。我是否也可以使用事件系统和我正在使用的框架(Laravel)对计数列进行加或减?我想你可以,但它可能会降低可靠性