본문 바로가기

프로그래밍/oracle

oracle - 실행계획 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)

 

 

 

 


반응형