在论坛上计算帖子数量
问题描述:
我有一个论坛,其中有主题标题,帖子数量和其他信息。我已经设法优化其他查询/完全删除它们,但是计算每个线程的帖子数量的查询会减慢主板页面的加载速度。在论坛上计算帖子数量
即echo $boards->getPostCount($thread)
内getPostCount($thread)
就是: $query = $this->db->query("SELECT COUNT(id) FROM forum_posts WHERE threadid = '$thread'
这是一个问题,因为它为每个线程做到这一点,则每页有20个线程。
有没有其他办法,我可以事先得到这个信息,或以某种方式最大限度地减少了获取这些信息所需要的查询?在任何给定时间有150个用户,因此每页加载的3K查询不是我想要的。
谢谢。
编辑:我是给使用该查询的EXPLAIN: mysql explain http://screensnapr.com/e/01hulx.png
答
使用联接:
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和它永远回来了结果。所以,我不知道是否有问题或者帖子数量太大(300k帖子,34k线程) – Steve 2012-04-27 20:59:04
我在线程和帖子表之间增加了适当的关系,并且一切顺利。 – Steve 2012-04-28 00:52:03
@Tar:在'forum_threads(boardid,sticky,lastbump)'和'forum_posts(threadid)'上创建一个索引'。 – Quassnoi 2012-04-28 03:35:15