이것에 대한 많은 정보를 찾을 수 없습니다.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를 계산하거나 추가 열을 계산하는 것이 더 효율적입니까?
가능한 중복 :
는 전체 쿼리이 만드는 당신은 쉽게 성능을 크게 증가하는 하위 쿼리를 제거 할 수 있습니다 [사람들은 왜 새로운 데이터베이스 컬럼에 X의 개수를 저장합니까?] (http://stackoverflow.com/questions/6883352/why-do-people-saves-count-of-x-in-new-databases-column) –
제안 된 사본을 참조하십시오. 매우 유사한 질문 - 각 페이지 뷰에서 집계를 다시 계산하는 것이 아니라 집계를 저장하는 것이 훨씬 효율적입니다. –
예, 그 문제에 관해 읽을 수있는 최초의 실제 정보를 링크 해 주셔서 감사합니다. – Psyrus