计算论坛上的帖子数量
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)
上创建另一个索引。以上是关于计算论坛上的帖子数量的主要内容,如果未能解决你的问题,请参考以下文章