SQL_JOIN
조인 수행 원리
Nested Loop 조인 (NL 조인)
- NL 조인은 하나의 테이블에서 데이터를 먼저 찾고 그 다음 테이블을 조인하는 방식!
- 먼저 조회되는 테이블을 OUTER TABLE이라하고 다음으로 조인되는 테이블을 INNER TABLE이라 함!
- NL 조인은 RANDOM ACCESS가 많이 일어나서 성능 지연이 발생할 수 있음!
- 위 그림에서 선행테이블에서 다음 인덱스를 찾는 과정을 RANDOM ACCESS라고 함
SELECT /*+ORDERED USE_NL (B) */ *
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO
AND A.DEPTNO =10;
실행 계획으로 EMP테이블을 먼저 FULL SCAN 하고 그 다음 DEPT 테이블을 FULL SCAN하여 조인한다.
ORDERED는 FROM 절에 나오는 테이블 순서대로 조인하게 하는 것! 혼자 사용되지 않고 USE_NL, USE_MERGE, USE_HASH 등이 같이 쓰임
SORT MERGE 조인
- 두 개의 테이블을 SORT_AREA라는 메모리 공간에 모두 로딩하고 SORT를 수행한다.
- SORT가 완료되면 두 개의 테이블을 병합한다
- SORT가 발생하기 때문에 데이터 양이 많아지면 성능이 떨어진다 ( 정렬은 임시영역에서 수행되며 이는 디스크에 위치)
//ORACLE 에서 의도적으로 SORT MERGE를 사용한 예시
SELECT /*+ORDERED USE_MERGE(B) */ *
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO
AND A.DEPTNO = 10;
HASH 조인
- 두 개의 테이블 중에서 작은 테이블을 HASH 메모리에 로딩하고 두 개의 테이블을 조인 키를 사용해서 해시 테이블을 생성
- 해시 함수를 사용해서 주소를 계산하고 해당 주소를 사용해서 테이블 조인 ( CPU 연산량이 많음 )
- 선행테이블이 메모리에 충분히 로딩되는 크기여야 함
SELECT /*+ ORDERED USE_HASH(B) */ *
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO
AND A.DEPTNO = 10;
Author And Source
이 문제에 관하여(SQL_JOIN), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@seungjoo/SQLJOIN저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)