我有一个论坛,其中包含主题标题,帖子计数和其他信息。我已经设法优化其他查询/完全删除它们,但计算每个线程的帖子计数的那个正在减慢加载主板页面。
即。 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 :(得分: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
字段,并在每次发布或删除帖子时对其进行更新。 / p>