본문으로 바로가기

[Oracle] 어느 쿼리가 더 빠를까

category DB/Oracle 2016. 2. 18. 09:43

18. 자신의 매니저보다 먼저 고용된 사원들의 LAST_NAME 및 고용일을 조회한다.

는 문제를 풀어보았다.

JOIN을 이용하고 서브쿼리를 이용하는 방법과

JOIN만 이용하는 방법이 있었다.


SELECT  LAST_NAME

        , HIRE_DATE

FROM    EMPLOYEES E

WHERE   HIRE_DATE < (

                      SELECT  HIRE_DATE

                      FROM    EMPLOYEES E2

                      WHERE   E.MANAGER_ID = E2.EMPLOYEE_ID

                      )

;


SELECT  EMP.LAST_NAME

        , EMP.HIRE_DATE

FROM    EMPLOYEES EMP

        , EMPLOYEES MGR

WHERE   EMP.MANAGER_ID = MGR.EMPLOYEE_ID

AND     EMP.HIRE_DATE < MGR.HIRE_DATE

;


누가 더 빠를까?

알아보는 방법이 있다.

알아보고 싶은 쿼리를 드래그한 다음에 마우스 우클릭을 한다.


그러면 아래에 계획 설명창이 뜬다.

첫번째 테이블은 FULL SCAN

두번째 테이블은 INDEX SCAN이 들어감을 볼 수 있다.

오른쪽 끝에 총 COST는 21+3+1=25이다.



두번째 쿼리의 계획 설명이다.

첫번째 테이블은 FULL SCAN

두번쨰 테이블도 FULL SCAN이지만

총 COST는 7+7+3+3=20으로

위 쿼리보다 아래쿼리가 더 빠름을 확인할 수 있었다.



막간퀴즈~

DISTINCT 가 느릴까 GRUOP BY가 느릴까?






정답은 GROUP BY가 느리다.

DISTINCT는 제거시키면서 비교하지만

GROUP BY는 같은 정보들을 모으기 때문이다.

'DB > Oracle' 카테고리의 다른 글

[Oracle] NOT EXISTS  (0) 2016.02.18
[Oracle] VIEW 뷰  (0) 2016.02.18
[Oracle] 테이블 조인( JOIN )  (0) 2016.02.17
[Oracle] 테이블 제약조건  (0) 2016.02.17
[Oracle] 서브 쿼리  (0) 2016.02.16