【问题标题】: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

【问题讨论】:

    标签: php mysql query-optimization


    【解决方案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) 上创建另一个索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    相关资源
    最近更新 更多