본문 바로가기
Database/SQLD

조인 방식(NL, SORT MERGE, HASH JOIN)

by KkingKkang 2023. 7. 14.

1. NL Join ( Nested Loops Join) 

  • 조인 컬럼에 인덱스 있으면 유리
  • 선행 테이블에서 만족하는 행수가 적을수록 유리 → 컬럼 순서가 중요함 
  • 수행시간이 적게걸리는 소량테이블 조회시 유리 
select /*+ order use_nl(e) */ e.empno, e.ename, d.dname,e.job, e.sal
from dept d, emp e
where e.deptno = d.deptno

 

2. Sort Merge Join

  • 조인 전 양쪽 집합 정렬
  • 부분범위 처리 가능
  • 테이블 별 검색 조건에 의해 전체 일량이 좌우됨
  • 스캔위주의 조인방식

 

3. Hash Join

  • 둘 중 작은 집합(Build Input)을 읽어 해시 영역(Hash Area)에서 해시 테이블(= 해시 맵)을 생성하고, 반대쪽 큰 집합(Probe input)을 읽어 해시 테이블을 탐색하면서 조인 
  • 조인 칼럼에 적당한 인덱스가 없어 NL Join 이 비효율적일 때 
  • 조인 컬럼에 인덱스가 있더라도 NL Join 드라이빙 집합에서  Inner 쪽 집합으로 조인 엑세스량이 많아 Random 엑세스 부하가 심할 때 
  • Sort Merge Join 하기에는 두 테이블이 너무 커 소트 부하가 심할 때 
  • Build Input이 작을 때, 해시 키칼럼의 중복이 없을 때 효과적

1. 아래의 옵티마이저와 실행계획에 대한 설명 중에서 옳은 것을 모두 묶은 것은?

가) ORACLE의 규칙기반 옵티마이저에서 가장 우선 순위가 높은 규칙은 Single row by rowid 액세스 기법이다.

규칙기반 옵티마이저(RBO, RULE BASED OPTIMIZER) 우선순위

1. ROWID를 사용한 단일 행
2. 클러스터 조인에 의한 단일 행
3. 유일하거나 기번키(PK)를 가진 해시 클러스터 키에 의한 단일 행
4. 유일하거나 기본키에 의한 단일 행
5. 클러스터 조인
6. 해시 클러스터 조인
7. 인덱스 클러스터 키
8. 복합 칼럼 인덱스
9. 단일 칼럼 인덱스
10. 인덱스가 구성된 칼럼에서 제한된 범위를 검색
11. 인덱스가 구성된 칼럼에서 무제한 범위를 검색
12. Sort Merge Join
13. 인덱스가 구성된 칼럼에서 MAX 혹은 MIN을 구하는 경우
14. 인덱스가 구성된 칼럼에서 ORDER BY를 실행
15. 전체 테이블 스켄 (FULL TABLE SCAN)


나) 비용기반 옵티마이저는 테이블, 인덱스, 컬럼 등 객체의 통계정보를 사용하여 실행계획을 수립하므로 통계정보가 변경되면 SQL의 실행계획이 달라질 수 있다. 

다) ORACLE의 실행계획에 나타나는 기본적인 JOIN 기법으로는 NL JOIN, HASH JOIN, SORT MERGE JOIN등이 있다.

라) 다양한 JOIN 기법 중 NL JOIN은 DW등에서 데이터를 집계하는 업무에 많이 사용된다. 
→ DW(Data Warehouse)에서는 대용량 데이터를 많이 다루기 때문에 HASH JOIN이나 SORT MERGE JOIN을 사용한다.

 

2. 다음 중 Nested Loop Join 에 대한 설명으로 가장 부적절한 것은?

1) 조인 칼럼에 적당한 인덱스가 있어서 자연조인(Natural Join)이 효율적일 때 유용하다.

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

3) 소트 머지 조인하기에 두 테이블이 너무 커서 소트 부하가 심할 때 유용하다. → 소트 부하가 심할 때는 Hash Join

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

 

3. 아래와 같은 SQL에서 나타날 수 있는 JOIN 기법으로 가장 적절한 것은?

[DEPT TABLE INDEX 정보]
PK DEPT : DEPTNO

[EMP 테이블 INDEX 정보]
PK EMP : EMPNO
IDX EMP 01 : DEPTNO

[SQL]
SELECT *
FROM DEPT D
WHERE DEPTNO = 'A0001' AND
EXISTS (SELECT 'X' FROM EMP WHERE D.DEPTNO = E.DEPTNO)

1) HASH ANTI JOIN
2) HASH SEMI JOIN
3) NESTED LOOP ANTI JOIN
4) NESTED LOOP SEMI JOIN

SEMI JOIN : 조건에 부합하면 더 이상 연산을 수행하지 않는 것을 뜻함. EXISTS 구문에서 사용
ANTI JOIN : NOT EXISTS

 

4. 다음 중 SM(Sort Mege join)에 대한 설명으로 가장 부적절한 것은?

1) 조인 컬럼에 적당한 인덱스가 없어서 NL 조인(Nested Loops)가 비효율적일 때 사용할 수 있다.
2) Driving Table 의 개념이 중요하지 않은 조인 방식이다.
3) 조인 조건의 인덱스 유무에 영향받지 않는다.
4) EQUI(=) 조인 조건에서만 동작한다. → NL조인에 대한 설명

 

5. 해싱 기법을 이용하여 조인을 하는 해시조인은 한쪽 테이블이 주 메모리의 가용 메모리에 담길 정도로 충분히 작고 해시 키 속성에 중복 값이 적을 때 효과적이다. 다음 중 해시조인이 더 효과적일 수 있는 조건에 대한 설명으로 가장 부적절한 것은?

1) 조인 칼럼에 적당한 인덱스가 없어서 자연조인이 비효율적일 때 
2) 자연조인시 드라이빙(driving)집합 쪽으로 조인 액세스량이 많아 random 액세스 부하가 심할 때
3) 소트 머지 조인(sort merge join)을 하기에는 두 테이블이 너무 커서 소트 부하가 심할 때 
4) 유니크 인덱스를 활용하여 수행시간이 적게 걸리는 소량 테이블을 온라인 조회하는 경우 → NL JOIN

 

6. 다음 중 JOIN 기법에 대한 설명으로 가장 적절한 것은 ?

1) NL JOIN은 선택도가 낮은(결과 행의 수가 적은) 테이블이 선행 테이블로 선택되는 것이 일반적으로 유리하다.
2) SORT MERGE JOIN 은 동등 JOIN(EQUI JOIN)에서만 사용할 수 있으므로 제약이 존재한다.
3) HASH JOIN은 결과 행의 수가 큰 테이블을 선행 테이블로 사용하는 것이 성능에 유리하다.
4) HASH JOIN은 SORT MERGE JOIN보다 항상 우수한 성능을 보장한다.  

반응형

'Database > SQLD' 카테고리의 다른 글

데이터 모델링의 이해  (0) 2023.08.22
인덱스  (0) 2023.07.14
옵티마이저  (1) 2023.06.09
PL/SQL  (0) 2023.06.05
윈도우 함수와 문제풀이3 - 권한  (0) 2023.06.05

댓글