정미나닷컴
[Oracle] 오라클 쿼리 변환 - 조건절 이행 본문
조건절 이행
- 『(A = B) 이고 (B = C) 이면 (A = C) 이다』는 추론을 통해 새로운 조건절을 내부적으로 생성해 주는 쿼리변환
- 『(A > B) 이고 (B > C) 이면 (A > C) 이다』와 같은 추론도 가능
- A 테이블에 사용된 필터 조건이 JOIN 조건절을 타고 반대편 B 테이블에 대한 필터 조건으로 이행
- 한 테이블 내에서도 두 컬럼간 관계정보를 이용해 조건절 이행
SELECT *
FROM MINA.DEPT D, MINA.EMP E
WHERE E.JOB = 'MANAGER'
AND E.DEPT_NO = '10'
AND D.DEPT_NO = E.DEPT_NO;
-----------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | A-Rows | A-Time | Buffers |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1 |00:00:00.01 | 4 |
| 1 | NESTED LOOPS | | 1 | 1 |00:00:00.01 | 4 |
| 2 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 1 |00:00:00.01 | 2 |
|* 3 | INDEX UNIQUE SCAN | PK_DEPT | 1 | 1 |00:00:00.01 | 1 |
| 4 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 1 |00:00:00.01 | 2 |
|* 5 | INDEX RANGE SCAN | EMP_IDX | 1 | 1 |00:00:00.01 | 1 |
-----------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("D"."DEPT_NO"='10')
5 - access("E"."DEPT_NO"='10' AND "E"."JOB"='MANAGER')
- 『E.DEPT_NO = '10'』 이고 『E.DEPT_NO = D.DEPT_NO』 이므로 『D.DEPT_NO = '10'』 으로 추론
- 조건절 이행을 통해 아래와 같은 형태로 변환
SELECT *
FROM MINA.DEPT D, MINA.EMP E
WHERE E.JOB = 'MANAGER'
AND E.DEPT_NO = '10'
AND D.DEPT_NO = '10';
'IT' 카테고리의 다른 글
[Oracle] 오라클 Prefetch, 인덱스 Prefetch, 테이블 Prefetch (0) | 2018.01.05 |
---|---|
[Linux] 리눅스 nc(netcat) 명령어를 이용한 방화벽 서버 포트 스캔 (0) | 2017.12.18 |
[Oracle] 오라클 쿼리 변환 - 조건절 Pushing (0) | 2017.11.12 |
[Oracle] 오라클 쿼리 변환 - 뷰 Merging (0) | 2017.11.12 |
[Oracle] 오라클 쿼리 변환 - 서브쿼리 Unnesting (0) | 2017.11.12 |