작성
·
144
0
안녕하세요,
JOIN 수업을 들으며 JOIN 순서와 수행시간에 궁금한 점이 생겨서 질문드립니다.
1번 emp -> dept 테이블로 조인한 경우
-- 1
SELECT B.DNAME, A.EMPNO, A.ENAME, A.JOB, C.FROMDATE, C.TODATE, C.SAL
FROM HR.EMP A
JOIN HR.DEPT B ON A.DEPTNO = B.DEPTNO
JOIN HR.EMP_SALARY_HIST C ON A.EMPNO = C.EMPNO
WHERE B.DNAME IN ('SALES', 'RESEARCH')
2번 dept -> emp 테이블로 조인한 경우
SELECT A.DNAME, B.EMPNO, B.ENAME, B.JOB, C.FROMDATE, C.TODATE, C.SAL
FROM HR.DEPT A
JOIN HR.EMP B ON A.DEPTNO = B.DEPTNO
JOIN HR.EMP_SALARY_HIST C ON B.EMPNO = C.EMPNO
WHERE A.DNAME IN ('SALES', 'RESEARCH')
데이터가 작은 테이블에서 큰 테이블(1 -> m)로 조인하는 것보다 큰 테이블에서 작은 테이블로(m -> 1) 조인하는게 속도가 더 빠를 것 같은데, 어떤 방식으로 조인하는게 더 효율적인지 궁금합니다.
데이터가 엄청 많아지는 경우, 1번과 2번 두 쿼리의 실행 속도에서 큰 차이가 날까요? 내부적으로 더 효율적인 방식으로 실행을 할 수 도 있는건가요?
답변 1
1
안녕하십니까,
일반적으로 테이블이 작은 집합에서 테이블이 큰 집합으로 조인하면 더 성능이 빠를것 같지만 조인의 성능을 좌우하는 요소들이 많아서 이렇게 단정 지을 수는 없습니다.
인덱스의 존재 여부, 조인의 유형(NL이나 Hash냐), where 조건, 부분범위 처리 여부등 여러가지 성능을 좌우하는 여러 요소들이 고려되어야 합니다.
위 사항에 대한 내용을 잘 모르겠다라고 생각하시면 말씀하신대로 테이블이 작은 집합에서 큰 집합으로 조인하면 됩니다. 다만 이 경우 크게 성능이 향상 되지 않는다면 위에서 말씀 드린 다양한 조건때문에 그런 것으로 생각해 주시면 될 것 같습니다.
감사합니다