메뉴 건너뛰기

bysql.net

11. 집합 연산을 조인으로 변환

2011.06.08 05:22

suspace 조회 수:5994

 

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") AND

                     SYS_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") AND

                     SYS_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
문서의 잘못된 점이나 질문사항은 본문서에 댓글로 남겨주세요. ^^


번호 제목 글쓴이 날짜 조회 수
60 Front Page file 운영자 2011.02.16 149419
59 3. 인덱스 파티셔닝 darkbeom 2011.06.20 53828
58 3. 다양한 인덱스 스캔 방식 file 멋진넘 2011.02.19 33807
57 8. 통계정보 Ⅱ [1] 멋진넘 2011.04.30 31079
56 2. 파티션 Pruning 실천하자 2011.06.22 26018
55 3. 뷰 Merging 실천하자 2011.05.15 23382
54 3. 해시 조인 file darkbeom 2011.03.21 21530
53 2. 서브쿼리 Unnesting darkbeom 2011.05.16 19700
52 4. 통계정보 Ⅰ darkbeom 2011.04.26 18092
51 7. 인덱스 스캔 효율 [1] 휘휘 2011.03.09 16891
50 7. Sort Area 크기 조정 실천하자 2011.06.14 15067
49 4. 테이블 Random 액세스 부하 [1] file darkbeom 2011.02.24 14677
48 4. 조인 순서의 중요성 운영자 2011.03.28 14240
47 1. 인덱스 구조 [1] file 실천하자 2011.02.16 14190
46 1. 기본 개념 멋진넘 2011.06.28 13399
45 8. 고급 조인 테크닉-1 [1] file darkbeom 2011.04.04 13265
44 9. 비트맵 인덱스 file 실천하자 2011.03.06 12343
43 1. 옵티마이저 file 실천하자 2011.04.18 11211
42 6. 히스토그램 실천하자 2011.04.25 10917
41 6. Sort Area를 적게 사용하도록 SQL 작성 file 실천하자 2011.06.14 8857