Database/MySQL

SubQuery 활용

BUST 2017. 6. 25. 22:17

SubQuery 활용

JoinQuery

SELECT C.co_cdC.districtSUM(emp_nbr) as sum_emp
FROM Comapnies C
INNER JOIN Shops S
ON c.co_cd = S.co_cd
WHERE main_flg = 'Y'
GROUP BY c.co_cd
  • 결합을 먼저 수행
  • 회사테이블과 사업소 테이블의 결합(join)를 먼저 수행하고, 결과를 Group by를 적용해서 집약

SubQuery

SELECT C.co_cdC.districtCSUM.sum_emp
FROM Comapnies C
INNER JOIN (
    SELECT co_cd, SUM(emp_nbr) as sum_emp
    FROM Shops
    WHERE main_flg = 'Y'
    GROUP BY co_cd) CSUM
ON C.co_cd = CSUM.co_cd  
  • 집약을 먼저 수행
  • 먼저 사업소 테이블의 집약해서, 직원수를 구하고 테이블과 결합.

Join 대상 레코드 수의 따른 결과

데이터의 양이 작은 경우

  • 회사 테이블 : 4개
  • 사입소 테이블 : 10개

Join 활용시 결합 대상 레코드 수

  • 회사 테이블 4개
  • 사업소 테이블 : 10개

SubQuery 활용시 결합 대상 레코드 수

  • 회사 테이블 : 4개
  • 사업소 테이블 : 4개

위와 같이 데이터가 작을 경우에는 큰 차이가 보이지 않음.

하지만 데이터의 양이 많은 경우

  • 회사 테이블 : 레코드 1,000개
  • 사업소 테이블(main_flg='Y') : 레코드 500만개
  • 사업소 테이블(CSUM) : 레코드 1000개

위와 같이 회사 테이블의 규모에 비해, 사업소 테이블의 규모가 매우 크다면, 일단 Join 대상의 레코드 수를 집약하는 편이 I/O비용을 더 줄일수 있는 방법.

요약

  • 사전에 Join 대상의 테이블의 레코드 수를 압축을 한다.


'Database > MySQL' 카테고리의 다른 글

Group By 쿼리의 활용  (0) 2018.06.09
MySQL 기본 Query 정리  (0) 2018.02.11
커버링 인덱스  (0) 2018.02.10
Timestamp and Datetime  (0) 2017.07.02
DB Isolation Level  (0) 2017.06.11