2012-04-27 160 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