인덱스 튜닝보다 더 중요한 조인 튜닝!
조인은 두개 이상의 이상의 테이블을 스캔하기때문에
더 많은 시간이 걸립니다.
오라클 조인을 모른다면 여기부터!
오늘은
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
이 글이 도움되셨다면 아래 공감 꾹~
'SQL' 카테고리의 다른 글
ORACLE SQL 튜닝 | 서브쿼리 튜닝_조인 힌트( no_merge, no_unnest ) (0) | 2018.05.01 |
---|---|
ORACLE SQL 튜닝 | 조인 튜닝2_튜닝방법 (nested loop join, hash join, sort merge join) (0) | 2018.04.30 |
ORACLE SQL 튜닝 | 인덱스 튜닝 ( index skip scan, index full scan, index fast full scan) (2) | 2018.04.19 |
ORACLE | 정규식 함수(regular expression) (0) | 2018.04.18 |
ORACLE | 다중 INSERT문 4가지 방법 (0) | 2018.04.17 |