计算论坛上的帖子数量

Posted

技术标签:

【中文标题】计算论坛上的帖子数量【英文标题】:Counting thread post count on forums 【发布时间】:2012-04-27 20:45:05 【问题描述】:

我有一个论坛,其中包含主题标题、帖子数和其他信息。我已经设法优化其他查询/完全删除它们,但是计算每个线程的帖子数的那个会减慢主板页面的加载速度。

echo $boards->getPostCount($thread)

getPostCount($thread) 内部只是: $query = $this->db->query("SELECT COUNT(id) FROM forum_posts WHERE threadid = '$thread'

这是一个问题,因为它必须为每个线程执行此操作,并且每页有 20 个线程。

有没有其他方法可以让我事先获得这些信息,或者以某种方式最大限度地减少获得这些信息所需的查询?在任何给定时间都有 150 个用户,所以每次页面加载 3K 查询不是我想要的。

谢谢。

编辑:我使用的查询的解释: mysql explain http://screensnapr.com/e/01hulx.png

【问题讨论】:

【参考方案1】:

使用连接:

SELECT  t.*, COUNT(fp.id)
FROM    threads t
LEFT JOIN
        forum_posts fp
ON      fp.threadid = t.id
ORDER BY
        t.last_updated DESC
LIMIT 20

但是,这仍然需要引擎在每次重新加载时计算每个线程的帖子。

您可以启用查询缓存(它是此类查询的理想选择)或只需将 post_count 字段添加到 threads 并在每次发布或删除帖子时更新它。

【讨论】:

我以前试过这个,做这样的查询基本上会杀死 MySQL,并且需要很长时间才能得到结果。所以,不知道是mysql有问题还是发帖量太大(300k帖子,34k线程) 我在线程和post表之间添加了适当的关系,一切都很顺利。 @Tar:在forum_threads (boardid, sticky, lastbump) 上创建一个索引,在forum_posts (threadid) 上创建另一个索引。

以上是关于计算论坛上的帖子数量的主要内容,如果未能解决你的问题,请参考以下文章

水王(课堂作业)

MySQL 连接表和使用 COUNT 函数的问题

找水王

如何在dz6.0论坛的主题贴子上投放google广告

mysql启动关闭的批处理,感觉很好用在其他论坛帖子上找到的,感谢分享

软件工程个人作业06