SQL_JOIN

1693 단어 sqlDatabaseDatabase

조인 수행 원리

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;

좋은 웹페이지 즐겨찾기