charminseok
테이터베이스 조인연산 종류 본문
데이터베이스의 조인연산에는 nested loop join, sort-merge join, hash join 등이 존재합니다.
Nested Loop Join
2개 이상의 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 row를 결합하여 원하는 결과를 조합하는 방식입니다. 중첩된 for문을 검색하는 것과 같은 방식입니다.
먼저 선행 테이블의 처리 범위를 하나씩 엑세스하면서 추출된 값으로 연결할 테이블을 조인합니다.
좁은 범위에 유리한 성능을 보여준다.
순차적으로 처리하여 Random Access 위주
후행 테이블에는 조인을 위한 인덱스 생성 필요
선행테이블에 row 수가 많다면 그만큼 반복해서 후행테이블을 검색해야 하기 때문에 성능이 나빠질 것입니다. 테이블 중 row가 적은 쪽을 선행테이블로 설정하는 것이 좋다.
데이터를 랜덤으로 엑세스하기 때문에 결과 집합이 많으면 느려진다.
join 인덱스가 없거나, 조인 집합을 구성하는 검색조건이 조인 범위를 줄여주지 못할 경우 비효율적이다.
Sort Merge Join
검색 범위가 많을 때 주로 사용하는 조인방법입니다. 양쪽 테이블을 각각 엑세스해 결과를 정렬하고 정렬한 결과를 차례대로 스캔하면서 Merge하는 방법입니다. 조인 컬럼에 인덱스가 없거나 출력할 데이터가 많을 때 사용한다.
각 테이블에서 스캔 후 메모리에 정렬한 데이터를 둔다. 이렇게 정렬된 데이터에서 조인을 진행해 데이터를 merge합니다. 정렬한 후에 조인하기 때문에 인덱스가 없어도 사용할 수 있고 이런 방식때문에 많은 양의 데이터를 처리하는데 유리합니다.
각 테이블을 스캔할때 인덱스가 있다면 인덱스 스캔을 하고 인덱스가 없다면 테이블 풀스캔을 하기 때문에 인덱스가 있다면 검색속도 향상에 도움이 된다.
Hash Join
해쉬 조인은 조인될 두 테이블 중 하나를 해쉬 테이블로 선정해 조인될 테이블의 조인 키 값을 해시 알고리즘으로 비교하여 매칭되는 결과값을 얻는 방식입니다. 또한, ‘=’ 연산자인 경우에만 사용된다.
두 테이블(Build input) 중 작은 테이블(Probe Input)을 해쉬 테이블로 만들고 큰 테이블을 읽어 해쉬 테이블을 탐색하면서 조인합니다. Probe input의 해쉬함수 값을 통해 Build input 값을 찾는다.
HASH_AREA_SIZE에 맞춰 해쉬 테이블을 생성하기 때문에 작은 테이블을 Build input으로 설정하는 것이다. 만약 이 크기를 넘어선다면 임시 테이블 공간을 사용하기 때문에 성능이 나빠진다.
'all' 카테고리의 다른 글
[DVC] AI 버전 컨트롤 (0) | 2022.10.20 |
---|---|
[Kafka] 카프카 토픽 그리고 파티션 (0) | 2022.04.12 |