2012-04-27 2 views
1

스레드 제목, 게시물 개수 및 기타 정보가있는 포럼이 있습니다. 필자는 다른 쿼리를 최적화하거나 완전히 제거했지만 각 스레드의 게시 횟수를 계산하는 것은 메인 보드 페이지가로드되는 속도를 늦추고 있습니다. 포럼의 게시물 스레드 개수 계산

getPostCount($thread) 내부 echo $boards->getPostCount($thread)

은 : 그것은 각 스레드에 대해이 작업을 수행하는 페이지 당 20 개 스레드가 있기 때문에 $query = $this->db->query("SELECT COUNT(id) FROM forum_posts WHERE threadid = '$thread'

이 문제입니다.

이 정보를 사전에 얻을 수 있거나이 정보를 얻기 위해 필요한 쿼리를 최소화 할 수있는 다른 방법이 있습니까? 주어진 시간에 150 명의 사용자가 있으므로 페이지로드 당 3K 쿼리는 내가 원하는 것이 아닙니다.

감사합니다.

편집 :의 I 사용하도록 주어진 쿼리의 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 

그러나, 이것은 여전히 ​​각 다시로드에 각 스레드에 대한 게시물을 계산 엔진을 필요로한다.

쿼리 캐시를 사용하도록 설정하거나 () threads에 필드를 추가하고 게시물이 만들어 지거나 삭제 될 때마다 업데이트 할 수 있습니다.

+0

나는 이것을 시도한 적이 있으며 기본적으로 MySQL을 죽이고 결과를 얻으려면 영원히 걸린다. 그래서, mysql에 문제가 있거나 게시물의 양이 너무 많다면 (300k posts, 34k threads) – Steve

+0

스레드와 포스트 테이블 사이에 적절한 관계를 추가하고 모두 원활하게 진행했다. – Steve

+0

@Tar :'forum_threads (boardid, sticky, lastbump)'에 색인을 만들고'forum_posts (threadid)'에 또 다른 색인을 만듭니다. – Quassnoi