2011-08-30 3 views
2

이것에 대한 많은 정보를 찾을 수 없습니다.SQL COUNT (col)와 추가 로깅 열 ... 효율성?

사용자 주석을 기록 할 테이블이 있습니다. 각 댓글마다 다른 사용자의 좋아요/싫어요를 기록 할 수있는 테이블이 있습니다. 따라서 웹 페이지에 표시 할 데이터를 선택할 때 모든 좋아요/싫어요를 계산할 수있는 조인 및 하위 쿼리가 필요한 복잡한 쿼리가 있습니다. 내가 좋아하는 추가 한 경우,

SELECT comments.comment_id, comments.descr, comments.created, usrs.usr_name, 
    (SELECT COUNT(*) FROM comment_likers WHERE comment_id=comments.comment_id AND liker=1)likes, 
    (SELECT COUNT(*) FROM comment_likers WHERE comment_id=comments.comment_id AND liker=0)dislikes, 
    comment_likers.liker 
FROM comments 
INNER JOIN usrs ON (comments.usr_id = usrs.usr_id) 
LEFT JOIN comment_likers ON (comments.comment_id = comment_likers.comment_id 
    AND comment_likers.usr_id = $usrID) 
WHERE comments.topic_id=$tpcID 
ORDER BY comments.created DESC; 

그러나 및 코멘트 테이블에 열을 싫어하고 자동/감소 이러한 증가하는 트리거를 생성 : 내 예는 쿼리 누군가가 친절하게 요구되는 결과를 달성하기 위해 여기에 나를 도와입니다 좋아하는 열이 LIKER 테이블에 삽입/삭제/업데이트되면 SELECT 문은 현재보다 간단하고 효율적입니다. COUNTS와 함께 복잡한 쿼리를 사용하거나 추가 열과 트리거를 갖는 것이 더 효율적입니까?

일반화하기 위해 정기적으로 쿼리 할 때 COUNT를 계산하거나 추가 열을 계산하는 것이 더 효율적입니까?

+0

가능한 중복 :

sum(liker) likes, sum(abs(liker - 1)) dislikes, 

는 전체 쿼리이 만드는 당신은 쉽게 성능을 크게 증가하는 하위 쿼리를 제거 할 수 있습니다 [사람들은 왜 새로운 데이터베이스 컬럼에 X의 개수를 저장합니까?] (http://stackoverflow.com/questions/6883352/why-do-people-saves-count-of-x-in-new-databases-column) –

+1

제안 된 사본을 참조하십시오. 매우 유사한 질문 - 각 페이지 뷰에서 집계를 다시 계산하는 것이 아니라 집계를 저장하는 것이 훨씬 효율적입니다. –

+0

예, 그 문제에 관해 읽을 수있는 최초의 실제 정보를 링크 해 주셔서 감사합니다. – Psyrus

답변

0

검색어가 매우 비효율적입니다.

당신의 두 개의 하위 쿼리가 간단하게 교체 할 수 있습니다 :의

SELECT comments.comment_id, comments.descr, comments.created, usrs.usr_name, 
    sum(liker) likes, 
    sum(abs(liker - 1)) dislikes, 
    comment_likers.liker 
FROM comments 
INNER JOIN usrs ON comments.usr_id = usrs.usr_id 
LEFT JOIN comment_likers ON comments.comment_id = comment_likers.comment_id 
    AND comment_likers.usr_id = $usrID 
WHERE comments.topic_id=$tpcID 
ORDER BY comments.created DESC; 
+0

제안 해 주셔서 감사합니다. 나는 모든 하위 쿼리에 열중하지는 않지만 하나의 쿼리에서 모든 필수 데이터를 검색하는 다른 방법을 찾지 않습니다. 불행히도 귀하의 제안은 효과가 없지만 귀하는 제 요구 사항을 인식하지 못할 수도 있습니다. 나는 실제로이 쿼리에 대한 도움을 받았고 여기 링크는 내 요구 사항을 보여줍니다. http://stackoverflow.com/questions/7225303/mysql-count-function-not-performing-as-i-would-like -in-multiple-joined-query – Psyrus