반응형



인덱스 튜닝보다 더 중요한 조인 튜닝! 


조인은 두개 이상의 이상의 테이블을 스캔하기때문에

더 많은 시간이 걸립니다.


오라클 조인을 모른다면 여기부터!



오늘은


2번에 걸쳐 조인튜닝에 대해 다뤄보도록 하겠습니다.


조인 튜닝시에 가장 중요한 2가지


1. 조인 순서


 

(1) ordered: FROM 절에서 기술한 테이블 순서대로 조인


(2) leading: leading힌트 안에 테이블 순서대로 조인



2. 조인 방법



(1) use_nl: nested loop 조인


(2) use_hash: hashe loop 조인


(3) use_merge: sort merge loop 조인





오늘은 1. 조인 순 2가지 방법에 대해 알아봅시다!



오늘도 역시 예제를 위한 테이블 먼저 보고 갑시다!


[ 고객 테이블 ]


고객이름

 나이

  주소 

 총구매액

 추천인

 A

 24

 서울

 30000

 null

 B

 29

 서울

 10000

 A

 C

 26

 파주

 25000

 A

 D

 27

 제주

 1000

 B

 E

 25

 서울

 20000 C
 F 30 일산

 25000

 B
 G 32 파주 10000

 F

 H 23 일산 32000 A



[ 주소 테이블 ]


주소 

 관할부서

 서울

 한국 A

 일산

 한국 B

 파주

 한국 C

 제주

 한국 D




문제1. 관할부서가 한국 A인 고객들의

고객이름, 나이, 주소, 관할부서를

아래의 조건을 만족시켜서 출력하세요


(조인 순서: '주소테이블 --> 고객테이블' 순, ordered hint 사용하기)



조인 순서를 지정하는 방법 중

ordered 방법은 FROM절의 순서에 맞게

조인 순서를 지정할 수 있습니다.



문제에서 조인순서로

주소테이블을 먼저 scan하도록 지정한 이유가 무엇일까요?


row의 갯수가 적은 것을 먼저 스캔하는 것이 더 빠르기때문입니다.


 

SQL1> SELECT COUNT(*) FROM 주소 WHERE 주소 = '서울' ;


결과: 1


SQL2> SELECT COUNT(*) FROM 고객 WHERE 주소 = '서울' ;


결과: 3





문제2. 관할부서가 한국 A인 고객들의

고객이름, 나이, 주소, 관할부서를

아래의 조건을 만족시켜서 출력하세요


(조인 순서: '주소테이블 --> 고객테이블' 순, leading hint 사용하기)



문제는 같고 조인순서관련 조건만 다릅니다.



문제1과 문제2의 다른 점을 발견하셨나요?


ordered 와 leading의 가장 다른 부분은

FROM절에서 조인하는 순서에 맞추지 않아도 된다는 점입니다.


만약 조인하고자 하는 테이블이 여러개일 경우

FROM절에서 그 순서를 맞추기는 대략난감..;;


만약 데이터가 바뀌어서 COUNT를 다시 했는데 순서를 바꿔야한다?

쩝...


이때 ordered대신 leading hint를 사용하면

FROM절의 테이블 순서와 상관없이

직접 그 순서를 손쉽게 바꿀 수 있습니다. 



조인절이 궁금하다면 여기로!




오늘은 여기까지 간단하게 조인튜닝1_조인순서에 대해 알아보았습니다.


다음은 조인튜닝2_조인 방법으로 돌아오겠습니다~


Have a nice weekend



이 글이 도움되셨다면 아래 공감 꾹~ 



반응형

+ Recent posts