SubQuery 활용
JoinQuery
SELECT C.co_cd, C.district, SUM(emp_nbr) as sum_empFROM Comapnies CINNER JOIN Shops SON c.co_cd = S.co_cdWHERE main_flg = 'Y'GROUP BY c.co_cd
- 결합을 먼저 수행
- 회사테이블과 사업소 테이블의 결합(join)를 먼저 수행하고, 결과를 Group by를 적용해서 집약
SubQuery
SELECT C.co_cd, C.district, CSUM.sum_empFROM Comapnies CINNER JOIN (SELECT co_cd, SUM(emp_nbr) as sum_empFROM ShopsWHERE main_flg = 'Y'GROUP BY co_cd) CSUMON 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 |