2012-04-27 106 views
1

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

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

回答

0

使用联接:

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,并在每次发布或删除帖子时更新它。

+0

我以前试过这个,做这样的查询基本上杀死MySQL和它永远回来了结果。所以,我不知道是否有问题或者帖子数量太大(300k帖子,34k线程) – Steve 2012-04-27 20:59:04

+0

我在线程和帖子表之间增加了适当的关系,并且一切顺利。 – Steve 2012-04-28 00:52:03

+0

@Tar:在'forum_threads(boardid,sticky,lastbump)'和'forum_posts(threadid)'上创建一个索引'。 – Quassnoi 2012-04-28 03:35:15