我正在建立一个论坛,我试图计算每个用户提交的所有帖子。我应该使用COUNT(*) WHERE user_id = $user_id,或者如果我记录每个用户每次发布帖子并使用SELECT查询查找帖子时有多少帖子,会更快吗?
这会带来多大的性能差异?使用InnoDB和MyISAM存储引擎会有什么不同吗?
发布于 2011-08-14 09:11:04
如果你记录一个用户发了多少帖子,肯定会更快。
如果你在posts表的user字段上有一个索引,你也会得到不错的查询速度。但是,当您的posts表足够大时,它会损害您的数据库。如果你正在计划扩展,那么我绝对建议你保留特定领域的用户帖子的记录。
发布于 2011-08-14 09:10:57
存储预计算值是一种常见且简单但非常有效的优化方法。
因此,只需添加包含用户发布的评论数量的列,并使用触发器或您的应用程序维护它。
性能差异是:
COUNT(*)时,您将始终使用索引查找+结果计数在这种情况下,myisam和innodb之间没有明显的区别。
发布于 2011-08-14 09:24:43
存储帖子计数。不管存储引擎是什么,这似乎都是一个可伸缩性问题。您是否会在用户每次提交帖子时重新计算计数,还是会在webserver范围之外的某个地方运行一个作业来处理此负载?你的帖子数量是多少?您的服务器可以处理什么类型的负载?我真的不认为存储引擎会成为故障点。我说存储这个值。
https://stackoverflow.com/questions/7054325
复制相似问题