2017년 4월 17일 월요일

(구로디지털단지,IT실무,오라클강좌,자바강좌,Oracle Hint) 실행계획 SQL 연산(CONCATENATION)

실행계획 SQL 연산(CONCATENATION) 

반환된 로우를 합산하는 연산 입니다. 아래의 예를 보죠… 

SQL>SELECT * 
    FROM  EMP 
    WHERE  JOB=’SALESMAN’ 
    AND    DEPTNO IN (20, 40); 

Execution Plan 
------------------------------------------------------------- 
0          SELECT  STATEMENT Optimizer=CHOOSE 
1        0  CONCATENATION 
2        1    TABLE  ACCESS (BY INDEX ROWID) OF ‘EMP’ 
3        2      AND-EQUAL 
4        3        INDEX (RANGE SCAN) OF ‘idx_emp_deptno’ (NON-UNIQUE) 
5        3        INDEX (RANGE SCAN) OF ‘idx_emp_job’ (NON-UNIQUE) 
6        1    TABLE  ACCESS (BY INDEX ROWID) OF ‘EMP’ 
7        6      AND-EQUAL 
8        7        INDEX (RANGE SCAN) OF ‘idx_emp_deptno’ (NON-UNIQUE) 
9        7        INDEX (RANGE SCAN) OF ‘idx_emp_job’ (NON-UNIQUE) 


위의 실행 결과를 보면 JOB이 ‘SALESMAN’ 이면서 DEPTNO가 20인 데이터(AND-EQUAL)를 인덱스를 이용하여 추출하며 JOB이 ‘SALESMAN’ 이면서 DEPTNO가 40 데이터를 추출하여 서로 합산하여 결과를 만들어 냄을 알 수 있습니다. 

결국 위의 SQL을 다르게 풀어 쓰면 다음과 같은 실행 계획을 가진다고 할 수가 있습니다. 
(성능이 똑같다…) 

SQL> SELECT * 
    FROM  EMP 
    WHERE  (JOB=’SALESMAN’  AND    DEPTNO = 20) 
    OR      (JOB=’SALESMAN’  AND    DEPTNO = 40)

댓글 없음:

댓글 쓰기