[SQL] Join 수행 원리

hyunsooSong·2022년 5월 25일
0

SQL

목록 보기
14/14
post-thumbnail

📚 Join 수행 원리

1. Nested Loop Join

📜 NL Join은 주로 'Random Access 방식'으로 데이터를 읽는다.

  • 조인 컬럼에 적당한 인덱스가 있어서 자연조인이 효율적일 때 유용하다.

  • Driving Table의 조인 데이터 양이 큰 영향을 주는 조인 방식이다.


예시) 아래의 SQL의 경우 나타날 수 있는 Join 기법으로 적절한 것은?

[dept 테이블 index 정보]
pk_dept : deptNo
[emp 테이블 index 정보]
pk_emp : empNo
idx_emp : deptNo


[SQL]
SELECT *
FROM dept d
WHERE d.deptNo = 'A001'
AND EXISTS (SELECT 'X' FROM emp e WHERE d.deptNo = e.deptNo)

=> NESTED LOOP SEMI JOIN
: index 정보를 볼 때 HASH 보다는 NL JOIN이 나타날 가능성이 크며, EXISTS 절은 주로 SEMI JOIN으로 나타난다.


2. Sort Merge Join

📜 Sort Merge Join은 주로 'Scan 방식'으로 데이터를 읽는다.

: Sort Merge Join은 조인 컬럼을 기준으로 데이터를 정렬하여 조인을 수행한다.

  • Sort Merge Join은 랜덤 액세스로 NL Join에서 부담이 되던 넓은 범위의 데이터를 처리할 때 이용되던 조인 기법이다.

  • Driving Table 개념 중요치 않다.

  • 인덱스를 사용하지 않기 때문에 조인 조건의 인덱스의 유무에 영향을 받지 않는다.

[단점]

  • Sort Merge Join은 정렬할 데이터가 많아 메모리에서 모든 정렬 작업을 수행하기 어려운 경우에는 임시 영역(디스크)을 사용하기 때문에 성능이 떨어질 수 있다.

3. Hash Join

🎈 Hash Join은 '해쉬 함수'를 이용하여 조인을 수행하기 때문에 'EQUI(=)'로 수행하는 동등조인에서만 사용할 수 있다.

: 조인컬럼의 인덱스를 사용하지 않기 때문에 조인 컬럼의 인덱스가 존재하지 않을 경우에도 사용할 수 있는 조인 기법이다.


4. 상황별 효과적인 Join

🎈 Join은 선택도가 낮은(결과 행의 수가 적은) 테이블이 선행 테이블로 선택되는 것이 일반적으로 유리하다.

[NL Join]

  • 유니크 인덱스를 활용하여 수행시간이 적게 걸리는 소량 테이블을 '온라인 조회'하는 경우

[Sort Merge Join, Hash Join]

  • 조인 컬럼에 적당한 인덱스가 없어서 NL 조인이 비효율적인 경우

  • 자연조인 시 driving 집합 쪽으로 조인 액세스량이 많아 Random Access 부하가 심할 경우


[Hash Join]

  • Sort Merge 조인을 하기에는 두 테이블이 너무 커서 Sort 부하가 심할 경우

profile
🥕 개발 공부 중 🥕

0개의 댓글