Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 불순도제거
- if문 작성법
- count
- max
- sql
- sqld
- Sum
- 데이터분석
- Intersect
- 히스토그램 그리기
- 빅데이터
- 정보획득량
- 회귀분석
- merge
- 팀스파르타
- loop 문
- 여러 데이터 검색
- Dense_Rank
- 상관관계
- 단순회귀 분석
- 그래프시각화
- 그래프 생성 문법
- 회귀분석 알고리즘
- 막대그래프
- 순위출력
- 총과 카드만들기
- 빅데이터분석
- difftime
- 데이터분석가
- %in%
Archives
- Today
- Total
ch0nny_log
[빅데이터분석] SQL 튜닝_TIL 27 본문
[TIL 27] 240620
30. 3개 조인할때 조인방법
실행계 | NL조인 | HASH 조인 | SORT MERGE 조인 |
위쪽테이블 | driving table | hash table | 선행 테이블 |
아래쪽 테이블 | drivent table | probe table | 후행 테이블 |
■ 3개의 테이블을 조인을 한다고 하면
emp ------------> dept ------------> salgrade
↑ ↑
hash join nl join
select /*+ leading(e,d,s) use_hash(d) use_nl(s) */ e.ename, d.loc, s.grade
from emp e, dept d, salgrade s
where e.deptno = d.deptno
and e.sal between s.losal and s.hisal;
select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
문제1. 위의 sql이 아래와 같이 조인순서와 조인방법이 결정되게끔 힌트를 주시오.
salgrade ------------> emp ------------> dept
↑ ↑
sort merge join nested loop join
select /*+ leading(s,e,d) use_merge(e) use_nl(d) */ e.ename, d.loc, s.grade from emp e, dept d, salgrade s where e.deptno = d.deptno and e.sal between s.losal and s.hisal; select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
문제2. 위의 SQL에서 부서위치가 DALLAS 의 데이터만 출력하시오
select e.ename, d.loc, s.grade from emp e, dept d, salgrade s -- 14 / 4 /5 건 where e.deptno = d.deptno and e.sal between s.losal and s.hisal and d.loc='DALLAS'; --1건
dept ------------> emp ------------> salgrade
↑ ↑
sort merge join nested loop join
1건 5건
조인순서: dept ----> emp ---> salgrade
↑ ↑
조인방법: nl 조인 nl 조인
그런데 만약에 다음과 같은 상황이면 ?
1건 5만건
조인순서: dept ----> emp ---> salgrade
↑ ↑
조인방법: nl 조인 merge 조인
만약에 방금 위와 같이 dept 와 emp 를 조인했을때 5만건이 결과 데이터로
생성되었다라고 가정하고 아래의 SQL의 힌트를 주시오 !select /*+ leading(d,e,s) use_nl(e) use_merge(s) */ e.ename, d.loc, s.grade from emp e, dept d, salgrade s where e.deptno = d.deptno and e.sal between s.losal and s.hisal and d.loc='DALLAS';
문제 3. 아래의 SQL의 조인순서와 조인 방법을 결정하는데 다음과 같은 상황이라고 가정하고 조인순서와 조인방법을 결정하시오.
salgrade ------------> emp ------------> dept
(10만건) (12건)
select /*+ leading(s, e, d) use_merge(e) use_nl(d) */ e.ename, d.loc, s.grade from emp e, dept d, salgrade s where e.deptno = d.deptno and e.sal between s.losal and s.hisal; select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
'빅데이터 분석(with 아이티윌) > SQL' 카테고리의 다른 글
[빅데이터분석] SQL 튜닝_TIL 29 (0) | 2024.06.25 |
---|---|
[빅데이터분석] SQL 튜닝_TIL 28 (0) | 2024.06.24 |
[빅데이터분석] SQL 튜닝_TIL 26 (0) | 2024.06.19 |
[빅데이터분석] SQL 튜닝_TIL 25 (1) | 2024.06.18 |
[빅데이터분석] SQL 튜닝_TIL 24 (0) | 2024.06.17 |