11. 집합 연산을 조인으로 변환
2011.06.07 20:22
11. 집합 연산을 조인으로 변환
▶ Intersect나 minus 같은 집합(set) 연산을 조인 형태로 변환.
SQL> set autotrace traceonly exp;
SQL> select job, mgr from emp
2 minus
3 select job, mgr from emp
4 where deptno = 10 ;
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=8 Card=14 Bytes=243)1 0 MINUS
2 1 SORT (UNIQUE) (Cost=4 Card=14 Bytes=168)
3 2 TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14 Bytes=168)4 1 SORT (UNIQUE) (Cost=4 Card=5 Bytes=75)
5 4 TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=5 Bytes=75)
Predicate Information
----------------------------------------------------------
5 - filter ("DEPTNO"=10)
SQL> alter session set "_convert_set_to_join" = true;
SQL> select job, mgr from emp
2 minus
3 select job, mgr from emp
4 where deptno = 10 ;
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=8 Card=8 Bytes=216)1 0 SORT (UNIQUE) (Cost=8 Card=8 Bytes=216)
2 1 HASH JOIN (ANTI) (Cost=7 Card=8 Bytes=216)
3 2 TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14 Bytes=168)4 2 TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=5 Bytes=75)
Predicate Information
----------------------------------------------------------
2 - access (SYS_OP_MAP_NONNULL("JOB")=SYS_OP_MAP_NONNULL("JOB") ANDSYS_OP_MAP_NONNULL("MGR")=SYS_OP_MAP_NONNULL("MGR"))
4 - filter ("DEPTNO"=10)
- 해시 ANTI 조인을 수행하고 나서 중복 값을 제거하기 위한 HASH UNIQUE 연산 수행
SQL> select distinct job, mgr from emp e
2 where not exists (
3 select 'x' from emp
4 where deptno = 10
5 and sys_op_map_nonnull(job) = sys_op_map_nonnull(e.job)
6 and sys_op_map_nonnull(mgr) = sys_op_map_nonnull(e.mgr)
7 ) ;
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=8 Card=8 Bytes=216)1 0 SORT (UNIQUE) (Cost=8 Card=8 Bytes=216)
2 1 HASH JOIN (ANTI) (Cost=7 Card=8 Bytes=216)
3 2 TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14 Bytes=168)4 2 TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=5 Bytes=75)
Predicate Information
----------------------------------------------------------
2 - access (SYS_OP_MAP_NONNULL("JOB")=SYS_OP_MAP_NONNULL("E"."JOB") ANDSYS_OP_MAP_NONNULL("MGR")=SYS_OP_MAP_NONNULL("E"."MGR"))
4 - filter ("DEPTNO"=10)
- sys_op_map_nonnull 함수는 비공식적 함수.
Null값끼리 ‘=’ 비교하면 false지만 가끔 true가 되도록 처리해야 하는 경우 사용.
- job, mgr이 null 허용 컬럼이기 때문에 사용됨.
오라클 고도화 원리와 해법 2 (bysql.net 2011년 1차 스터디)
작성자: 이주영 (suspace)
최초작성일: 2011년 6월 7일
본문서는 bysql.net 스터디 결과입니다 .본 문서를 인용하실때는 출처를 밝혀주세요. http://www.bysql.net
문서의 잘못된 점이나 질문사항은 본문서에 댓글로 남겨주세요. ^^
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
20 | 5. 인덱스를 이용한 소트 연산 대체 | 멋진넘 | 2011.06.13 | 3397 |
19 | 6. IOT, 클러스터 테이블 활용 | 휘휘 | 2011.02.26 | 2800 |
18 | 6. 히스토그램 | 실천하자 | 2011.04.24 | 11008 |
17 | 6. 조인 제거 | 멋진넘 | 2011.05.30 | 4640 |
16 |
6. Sort Area를 적게 사용하도록 SQL 작성
![]() | 실천하자 | 2011.06.13 | 8928 |
15 | 7. 인덱스 스캔 효율 [1] | 휘휘 | 2011.03.08 | 17043 |
14 | 7. 비용 | 휘휘 | 2011.05.02 | 6218 |
13 | 7. OR-Expansion | 멋진넘 | 2011.05.31 | 9617 |
12 | 7. Sort Area 크기 조정 | 실천하자 | 2011.06.13 | 15240 |
11 | 8. 인덱스 설계 | 멋진넘 | 2011.03.06 | 8389 |
10 | 7. 조인을 내포한 DML 튜닝 | 실천하자 | 2011.04.03 | 7228 |
9 | 8. 통계정보 Ⅱ [1] | 멋진넘 | 2011.04.29 | 32211 |
8 | 8. 공통 표현식 제거 | darkbeom | 2011.06.06 | 5296 |
7 |
9. 비트맵 인덱스
![]() | 실천하자 | 2011.03.05 | 12417 |
6 |
8. 고급 조인 테크닉-1
[1] ![]() | darkbeom | 2011.04.03 | 13367 |
5 | 9. Outer 조인을 Inner 조인으로 변환 | darkbeom | 2011.06.06 | 7927 |
4 |
8. 고급 조인 테크닉-2
![]() | suspace | 2011.04.05 | 7074 |
3 | 10. 실체화 뷰 쿼리로 재작성 | suspace | 2011.06.07 | 5572 |
» | 11. 집합 연산을 조인으로 변환 | suspace | 2011.06.07 | 6039 |
1 | 12. 기타 쿼리 변환 [3] | 실천하자 | 2011.06.02 | 6702 |