레코드 및 레코드별 카운트 호출시 성능 비교 질문입니다. 1 4 235

by 석이 [MySQL] [2018.04.13 17:38:44]


안녕하세요. 석이입니다!

 

한번의 쿼리를 호출하면서, 서브쿼리형태 혹은 조인형태로 각 행마다의 카운트 정보를 함께 호출하려고 합니다.

아래와 같은 제품 테이블과 리뷰 테이블이 있을 경우 제품별 정보와 리뷰에 대한 갯수를 가져오려고 합니다.

이때 제품을 기준으로 리뷰에 대하여 서브쿼리 형태로 호출할지, 아니면 그룹바이된 조인쿼리를 사용할지를

퍼포먼스가 더 좋은 방향으로 설계하고 싶습니다.

 

제품 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개정도씩 가져올 예정입니다.

이러한 경우에, 어떤 쿼리가 퍼포먼스가 더좋은지 궁금합니다.

 

레코드의 갯수에 따라 다를수도 있는걸까요?

또한,  다른 테이블을 추가적으로 조인하여 카운트 정보를 여러개 추가로 가져올 경우에 어떤 형태가 더 빠를지도 궁금합니다.

 

읽어주셔서 감사합니다.

 

 

by 우리집아찌 [2018.04.14 10:43:36]

리스트 전체를 가져올경우는 당연히 후자인데. 

10건만 가져와서 10건만 서브쿼리를 타는 경우면 애매하네요..

둘다 실행해보고 판단해야할듯한데요..

 


by 석이 [2018.04.16 10:45:24]

감사합니다 ㅎㅎ 그럼 실행해보고 처리하는 방향으로 해보겠습니당!


by 마농 [2018.04.16 09:10:55]

조인을 하든 서브쿼리를 사용하든
페이징 이후에 처리하는 방향으로 하시면 됩니다.


by 석이 [2018.04.16 10:45:40]

네 참고해서 쿼리를 짜보도록 할게요~!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입