[SQLD] JOIN 수행 원리 및 유형

: ) YOUNG·2022년 3월 3일
2

SQLD

목록 보기
1/4
post-thumbnail

조인 수행 원리

조인의 개념

조인은 여러 개의 테이블을 연결해서 데이터를 출력하는 것을 말한다.

일반적으로 행들은 PK나 FK값의 연관에 의해 조인이 성립된다.

PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 조인이 성립되는 경우도 있다.


조인의 유형

Nested Loop Join- 선행 테이블에서 액세스한 각 값을 후행 테이블과 조인하는 방식
Sort Merge Join- 조인 컬럼을 기준으로 데이터를 정렬하여 조인을 수행하는 방식
Hash Join- 해시 함수를 이용해서 데이터를 조인하는 방식

Nested Loop Join (NL Join)

프로그래밍에서 사용되는 중첩된 반복문과 유사한 방식의 조인

한 테이블에서 데이터를 먼저 찾고 다음 테이블을 조인하는 방식

먼저 선행테이블의 조건을 만족하는 행을 추출하여 후행 테이블을 읽으면서 조인을 수행

한 테이블에서 데이털르 먼저 찾고 다음 테이블을 조인하는 방식

외부 테이블을 먼저 조회한 후, 내부 테이블 다음에 조회함

결과를 가능한 빨리 화면에 보여줘야하는 온라인 프로그램에 적당

랜덤 방식으로 액세스

RANDOM ACCESS 양을 줄여야 성능 향상

부분 범위처리가 가능한 상황에서 응답 속도가 개선됨

조인 컬럼의 인덱스 여부에 따라 효율이 달라짐

대량의 데이터는 비효율적


Sort Merge Join

조인 조건의 인덱스 유무에 영향을 받지 않아 NL Join이 비효율 일 때 사용

사전 Sorting 작업이 필요

대용량 데이터를 정렬하여 조인

동등 조인, 비동등 조인에서 모두 사용가능

먼저, 2개의 테이블을 SORT_AREA라는 메모리 공간에 모두 로딩함

데이터를 정렬하여 조인을 수행하는 방식

데이터양이 많으면 임시영역에서 수행 -> 정렬 때문에 성능 저하

Sort 단계 : 2개 테이블에 대해 정렬 수행 (컬럼 기준)

Merge 단계 : 정렬 후, 2개 테이블(집합)을 병합

기본키와 외래키 관계에서 외래키에 인덱스가 없을 때 Sort Merge Join이 NL Join보다 효율적이다.

두개의 테이블을 Sort 한 후 Merge를 한다.
Merge가 완료되면 한번의 Full Scan으로 데이터를 검색한다.


Hash Join

테이블 2개를 조인하여 결과를 가져와야 한다

2개 테이블에는 인덱스가 없음

각 테이블에 INDEX가 반드시 필요한 것은 아님

일반적으로 작은 테이블을 MEMORY에 올리는 선행 테이블로 사용

조인 컬럼의 인덱스가 존재하지 않더라도 사용할 수 있음

2개 테이블 중, 작은 테이블을 Hash 메모리에 로딩

동등 조인(=)에서만 사용할 수 있는 제약이 존재

Sort Merge Join 하기에 두 테이블이 너무 커서 정렬 부하가 심할 때는 Hash Join이 유용하다

해시함수를 사용하여 주소를 계산함

해시함수를 이용해서 조인 컬럼의 동일한 해시값을 갖는 데이터를 조인하는 방식

주소를 사용하므로 CPU 연산을 많이함

0개의 댓글