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 |