예를들어
상품정보 테이블이 있고 수불 테이블 있습니다.
각 품목에 대한 입고량을 알고 싶을 때
select a.상품코드, sum(b.입고량)
from 상품 a
inner join 수불 b
on a.상품코드 = b.품목코드
group by a.상품코드
이런 식으로 쿼리를 작성할텐데
만약 여기서 추가로 상품들의 정보까지 알고 싶을때
상품 테이블에서 각 상품에 대한 정보 컬럼들을 여러 개 추가로 더 작성할텐데
이럴때 어차피 각 상품코드는 상품 테이블의 기본키이기 때문에 상품 정보들을 max 로 뽑는게 좋은가요??
아님 group by 절에 다 작성하는게 좋은가요??
성능상 어느게 더 유리한가요??
-- 1. Max 처리 SELECT a.상품코드 , MAX(a.상품명) 상품명 , SUM(b.입고량) FROM 상품 a INNER JOIN 수불 b ON a.상품코드 = b.품목코드 GROUP BY a.상품코드 ; -- 2. Group By 에 추가 SELECT a.상품코드 , a.상품명 , SUM(b.입고량) FROM 상품 a INNER JOIN 수불 b ON a.상품코드 = b.품목코드 GROUP BY a.상품코드, a.상품명 ; -- 3. Group By 후 조인 SELECT a.상품코드 , a.상품명 , b.입고량 FROM 상품 a INNER JOIN (SELECT 상품코드 , SUM(b.입고량) 입고량 FROM 수불 GROUP BY 상품코드 ) b ON a.상품코드 = b.품목코드 ;
1번과 2번 결과는 차이가 없지만
2번이 PGA 메모리를 적게 사용한다고 하네요.
검색조건이 있다면 조인 후 그룹바이 하는 것이 좋을 수도 있겠으나
위 쿼리의 경우는 검색조건이 없으므로
조인 후 그룹바이 하는 것 보다는
3번 그루바이 후 조인하는게 조인 일량을 줄여 줄 듯 합니다.