안녕하세요
오늘은 서브쿼리 튜닝으로 돌아왔습니다.
서브쿼리 튜닝의 종류는 정말 다양합니다.
하지만!
이번 포스팅에서는
가장 중요한 두 가지!
merging과 unnesting에 대해 다뤄보도록 하겠습니다.
NO_MERGE vs NO_UNNEST
NO_MERGE: 뷰나 인라인 뷰에 사용 (인라인 뷰 = FROM절의 서브쿼리) NO_UNNEST: 인라인 뷰 외의 WHERE절 등의 서브쿼리에 사용 |
NO_MERGE와 NO_UNNEST의 공통점은
서브쿼리 ( 또는 뷰나 인라인 뷰 )
를 해체하지 말아라.
라는 의미를 갖고 있습니다.
그럼 그 반대도 있겠죠?
MERGE: 뷰나 인라인 뷰를 해체해라 UNNEST: 서브쿼리를 해체해라 (해쉬 테이블로 올릴 테이블을 직접 정하고자 할 때 사용) |
먼저 서브쿼리 UNNESTING 문부터 알아보죠!
[짝꿍처럼 써줘야하는 힌트]
NO_UNNEST: 서브쿼리를 해체하지 마라 1. PUSH_SUBQ: 서브쿼리부터 수행해라 2. NO_PUSH_SUBQ: 메인쿼리부터 수행해라 UNNEST: 서브쿼리를 해체해라 1. SWAP_JOIN_INPUT: 해쉬테이블로 올릴 테이블 지정 2.NO_SWAP_JOIN_INPUT: 해쉬테이블로 올리지 않을 테이블 지정 |
예제를 위한 테이블
[ emp ] : 사원테이블
사원명 | 나이 | 직업 | 연봉 | 주소 |
A | 35 | NULL | NULL | 파주 |
B | 34 | SALESMAN | 1600 | 제주 |
C | 38 | PRESIDENT | 5000 | 서울 |
D | 36 | SALESMAN | 1400 | 파주 |
E | 39 | ANALYST | 3000 | 서울 |
F | 32 | SALESMAN | 1350 | 서울 |
G | 37 | MANAGER | 2850 | 일산 |
H | 35 | ANALYST | 3000 | 파주 |
I | 36 | SALESMAN | 1700 | 서울 |
[ address ] : 주소테이블
주소 | 관할부서 |
서울 | 한국 A |
일산 | 한국 B |
파주 | 한국 C |
제주 | 한국 D |
예제1. 관할 부서가 한국A인 사원들의 이름, 직업, 연봉을 출력하세요.(서브쿼리로)
[결과]
사원명 | 직업 | 연봉 | 주소 |
C | PRESIDENT | 5000 | 서울 |
E | ANALYST | 3000 | 서울 |
F | SALESMAN | 1350 | 서울 |
I | SALESMAN | 1700 | 서울 |
다음으로 서브쿼리 MERGING 문을 알아보죠!
MERGE: 뷰나 인라인 뷰를 해체해라 NO_MERGE: 뷰나 인라인 뷰를 해체하지 마라
|
예제2. 직업이 SALESMAN과 관련된 데이터만 들어있는 뷰를 생성하고
그 뷰에서
관할부서가 한국A인 사원들의 이름, 직업, 연봉, 관할부서를 출력하세요.
사원 테이블이 1억건이고 그 중에 SALESMAN이 10건 있다고 가정하면
VIEW를 해체하지 않고 주소테이블과 조인하는 것이 더 효율적입니다.
[결과]
사원명 | 직업 | 연봉 | 관할부서 |
C | PRESIDENT | 5000 | 한국 A |
E | ANALYST | 3000 | 한국 A |
F | SALESMAN | 1350 | 한국 A |
I | SALESMAN | 1700 | 한국 A |
오늘은 여기까지!
서브쿼리문을 실행할 때, 서브쿼리문으로 실행할 지,
아니면 조인의 형태로 변경해서 실행할지,
쿼리변환기를 제어하는 기술을 알아보았습니다!
다음엔 PLSQL을 약간 다뤄보겠습니다!
'SQL' 카테고리의 다른 글
ORACLE PL/SQL | PLSQL (Procedure Language SQL) 101 (0) | 2018.05.08 |
---|---|
ORACLE SQL 튜닝 | 조인 튜닝2_튜닝방법 (nested loop join, hash join, sort merge join) (0) | 2018.04.30 |
ORACLE SQL 튜닝 | 조인 튜닝1_조인순서 ( ordered, leading ) (2) | 2018.04.20 |
ORACLE SQL 튜닝 | 인덱스 튜닝 ( index skip scan, index full scan, index fast full scan) (2) | 2018.04.19 |
ORACLE | 정규식 함수(regular expression) (0) | 2018.04.18 |