안녕하세요. 석이입니다!
한번의 쿼리를 호출하면서, 서브쿼리형태 혹은 조인형태로 각 행마다의 카운트 정보를 함께 호출하려고 합니다.
아래와 같은 제품 테이블과 리뷰 테이블이 있을 경우 제품별 정보와 리뷰에 대한 갯수를 가져오려고 합니다.
이때 제품을 기준으로 리뷰에 대하여 서브쿼리 형태로 호출할지, 아니면 그룹바이된 조인쿼리를 사용할지를
퍼포먼스가 더 좋은 방향으로 설계하고 싶습니다.
제품 TABLE
제품ID | 제품명 | 제품가격 |
P_ID1 | 컴퓨터 | 100 |
P_ID2 | 노트북 | 580 |
P_ID3 | 모니터 | 30 |
P_ID4 | 키보드 | 5 |
P_ID5 | 마우스 | 5 |
리뷰 TABLE
제품ID | 리뷰ID | 리뷰제목 | 리뷰내용 |
P_ID1 | R_ID1 | title1 | content1 |
P_ID1 | R_ID2 | title2 | content2 |
P_ID1 | R_ID3 | title3 | content3 |
P_ID2 | R_ID4 | title4 | content4 |
P_ID2 | R_ID5 | title5 | content5 |
P_ID3 | R_ID6 | title6 | content6 |
P_ID4 | R_ID7 | title7 | content7 |
P_ID4 | R_ID8 | title8 | content8 |
P_ID4 | R_ID9 | title9 | content9 |
위의 예제에 따라 제가 만든 쿼리는
1. 서브쿼리형태
SELECT 제품.제품ID, 제품.제품명, 제품.제품가격, (SELECT COUNT(*) FROM 리뷰 WHERE 리뷰.제품ID = 제품.제품ID) as 리뷰COUNT FROM 제품 #LIMIT 10
2. 조인형태
SELECT 제품.제품ID, 제품.제품명, 제품.제품가격, sub_리뷰.리뷰COUNT FROM 제품 LEFT JOIN (SELECT 리뷰.제품ID, COUNT(*) as 리뷰COUNT FROM 리뷰 GROUP BY 리뷰.제품ID) AS sub_리뷰 ON sub_리뷰.제품ID = 제품.제품ID #LIMIT 10
제품ID | 제품명 | 제품가격 | 리뷰COUNT |
P_ID1 | 컴퓨터 | 100 | 3 |
P_ID2 | 노트북 | 580 | 2 |
P_ID3 | 모니터 | 30 | 1 |
P_ID4 | 키보드 | 5 | 3 |
P_ID5 | 마우스 | 5 | 0 |
이러한 형태이며, 제품은 페이징 처리하여 약 10개정도씩 가져올 예정입니다.
이러한 경우에, 어떤 쿼리가 퍼포먼스가 더좋은지 궁금합니다.
레코드의 갯수에 따라 다를수도 있는걸까요?
또한, 다른 테이블을 추가적으로 조인하여 카운트 정보를 여러개 추가로 가져올 경우에 어떤 형태가 더 빠를지도 궁금합니다.
읽어주셔서 감사합니다.