group by 성능 관련 질문 0 1 1,109

by 와아아앙 [SQL Query] [2018.10.16 23:01:20]


예를들어

상품정보 테이블이 있고 수불 테이블 있습니다.

각 품목에 대한 입고량을 알고 싶을 때

 

select a.상품코드, sum(b.입고량)

from 상품 a

inner join 수불 b

on a.상품코드 = b.품목코드

group by a.상품코드

 

이런 식으로 쿼리를 작성할텐데

만약 여기서 추가로 상품들의 정보까지 알고 싶을때

상품 테이블에서 각 상품에 대한 정보 컬럼들을 여러 개 추가로 더 작성할텐데

이럴때 어차피 각 상품코드는 상품 테이블의 기본키이기 때문에 상품 정보들을 max 로 뽑는게 좋은가요??

아님 group by 절에 다 작성하는게 좋은가요??

 

성능상 어느게 더 유리한가요??

by 마농 [2018.10.17 08:38:57]
-- 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번 그루바이 후 조인하는게 조인 일량을 줄여 줄 듯 합니다.

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