2012-04-27 4 views
1

私は、スレッドのタイトル、投稿数、およびその他の情報を持つフォーラムを持っています。私は他のクエリを最適化するためにそれらを完全に削除することができましたが、各スレッドのポストカウントを数えるものは、メインボードページの読み込みを遅くしています。 getPostCount($thread)内部フォーラムでのスレッドのポストカウントを

すなわちecho $boards->getPostCount($thread)

だけである:それは各スレッドのためにこれを行う必要があり、ページごとに20件のスレッドがあるので $query = $this->db->query("SELECT COUNT(id) FROM forum_posts WHERE threadid = '$thread'

これが問題です。

私はこの情報を事前に得ることができますか、または何らかの形でこの情報を取得するために必要なクエリを最小限に抑えることができますか?いつでも150人のユーザーがいるので、1ページあたりの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 

をしかし、これはまだ、各リロード上の各スレッドの投稿をカウントするエンジンが必要です。

あなたは(それがそのようなクエリのための理想的です)クエリキャッシュを有効にするか、または単にthreadspost_countフィールドを追加し、それにポストが行われたり、削除されるたびに更新することができます。

+0

私はこれを前に試してみました。このようなクエリを実行すると、基本的にMySQLが終了し、結果が返ってくるまでには時間がかかります。だから、mysqlに問題があるのか​​、ポストの量が大きすぎるのか分かりません(300k投稿、34kスレッド) – Steve

+0

スレッドとポストテーブルの間に適切な関係が追加されました。 – Steve

+0

@Tar: 'forum_threads(boardid、sticky、lastbump)'と 'forum_posts(threadid)'に別のインデックスを作成します。 – Quassnoi

関連する問題