Fastcampus 합격의 하이패스 : SQLD 자격 과정 강의를 들으면서 학습한 내용을 정리한 글입니다
합격의 하이패스 : SQLD 자격 과정 | 패스트캠퍼스
합격패스 : SQLD 자격 과정
fastcampus.co.kr
개념 정리
조인
조인은 두 개 이상의 테이블을 하나의 집합으로 만드는 연산을 의미합니다. SQL문의 FROM 절에 두 개 이상의 테이블 혹은 집합이 존재할 경우 조인이 수행됩니다. 특히 조인은 3개 이상의 테이블을 조인한다고 하더라도, 특정 시점에 2개의 테이블 단위로 조인이 됩니다. 각각의 조인 단계에서는 서로 다른 조인 기법이 사용될 수 있습니다.
ex) A, B 조인시 NL 조인 수행 + A, B 조인의 결과와 C를 조인 시 해시 조인 수행
NL(Nested Loops) 조인
특징 | 설명 |
Random Access 위주의 조인 | NL 조인은 각 레코드를 순차적으로 처리합니다. |
대량의 데이터를 조인할 경우 인덱스를 통한 Random Access가 많고 이는 전체적인 성능 저하로 이어질 수 있습니다. | |
NL 조인은 한 번에 한 레코드씩 순차적으로 처리한다. |
NL 조인은 한 번에 한 레코드씩 순차적으로 처리합니다. |
조인되는 레코드의 범위를 가능한 한 좁혀서 처리하면, 더 효율적으로 조인을 수행할 수 있습니다. |
|
Driving 테이블 (주로 외부 루프에서 처리되는 테이블)의 크기 및 처리 범위가 전체 조인 성능을 결정한다. | 가능한 한 작은 테이블을 Driving 테이블로 선택하는 것이 성능에 유리합니다. |
인덱스의 유무 및 구성에 크게 의존한다. | 내부 테이블 (내부 루프에서 처리되는 테이블)에서 인덱스를 통한 접근 방식이 성능에 결정적인 영향을 미칩니다. |
소량의 데이터 처리나 부분 범위 처리를 필요로 하는 온라인 트랜잭션 처리 (OLTP, Online Transaction Processing) 환경에서 잘 작동한다. | OLTP 시스템이 일반적으로 요구하는 빠른 응답시간과 효율적인 데이터 처리 요구사항에 부합하기 때문입니다. |
작은 집합이 Driving 테이블이 되어야 하고, Inner 테이블의 인덱스 스캔이 매우 중요하다. | 이 방식은 조인 과정에서 필요한 데이터 접근과 처리량을 최소화하여 전체 성능을 향상시킵니다. |
Sort-Merge 조인
특징 | 설명 |
정렬 작업을 생략할 수 있는 인덱스가 존재하는 경우 사용한다. | 이미 정렬된 인덱스가 존재한다면, Sort-Merge 조인에서는 이를 활용하여 별도의 정렬 과정 없이 바로 병합 단계로 넘어갈 수 있습니다. |
정렬된 인덱스가 존재한다면, 처리 시간을 단축시키는 데 도움이 됩니다. | |
실시간으로 인덱스를 생성한다. | 인덱스가 없는 경우, 양쪽 집합을 먼저 정렬하고 나서 NL 조인과 유사한 방식으로 데이터를 처리할 수 있습니다. |
정렬된 데이터를 기반으로 더 효율적인 조인을 가능하게 합니다. | |
인덱스 유무에 영향을 받지 않는다. | Sort-Merge 조인은 인덱스의 유무에 크게 의존하지 않습니다. |
인덱스가 없는 경우에도 두 데이터 집합을 정렬하여 조인을 수행할 수 있습니다. | |
양쪽 집합을 개별적으로 읽고 나서 조인한다. | 조인 컬럼에 인덱스가 없는 상황에서도 Sort-Merge 조인은 두 테이블을 독립적으로 읽고 정렬하여 조인 대상 집합을 줄일 수 있습니다. |
이는 큰 데이터 집합에서 조인을 수행할 때 특히 유리할 수 있습니다. | |
스캔 위주의 액세스 방식이다. |
양쪽 소스 집합에서 정렬 대상 레코드를 찾는 작업이 스캔을 통해 이루어집니다. |
필요한 경우 인덱스를 이용한 랜덤 액세스 방식으로 처리될 수 있습니다. |
해시 조인
특징 | 설명 |
대량의 데이터 처리가 필요하고 쿼리 수행 시간이 오래 걸리는 대용량 테이블을 조인할 때 사용한다. | 배치 프로그램, 데이터 웨어하우스(DW), 온라인 분석 처리(OLAP, Online Analytical Processing) 쿼리 등 대용량 데이터를 처리 해야할 경우 해시 조인이 효과적입니다. |
NL 조인과 달리 Random Access 부하가 없다. | 해시 조인이 메모리 내 해시 테이블을 사용하여 조인을 수행하기 때문에, 디스크 I/O 작업이 상대적으로 적어서 처리 속도가 빠릅니다. |
Sort-Merge 조인과 달리 정렬 부하가 없다. | 데이터를 해시 테이블에 저장하는 과정에서 자연스럽게 조인에 필요한 구조가 만들어지기 때문에, 별도의 정렬 과정이 필요 없어 처리 효율이 높습니다. |
해시 테이블을 생성하는 비용에 따라, Build Input이 충분히 작을 때 효과적이다. | 해시 조인은 두 테이블 중 하나를 메모리 내에 해시 테이블로 생성 (Build Input)하고, 다른 하나는 이 해시 테이블을 조회하며 조인을 수행(Probe Input)합니다. |
해시 테이블을 생성하고 유지하는 데 필요한 메모리 공간이 충분히 확보되어 있어야 효과적으로 작동합니다. | |
작은 집합을 Build Input 으로 하고 큰 집합을 Probe Input 으로 하는 것이 중요하다. | 해시 조인을 효율적으로 수행하기 위해서는 상대적으로 작은 테이블을 해시 테이블로 생성하는 Build Input 으로 사용하고, 큰 테이블을 조회하는 Probe Input 으로 사용하는 것이 중요합니다. |
조인 기법 비교
이름 | 특징 | 사용 사례 |
NL 조인 | 순차적인 Random Access 이다. | OLTP |
Random Access 부하가 발생할 수 있다. | ||
조인 조건이 중요하다. | ||
조인의 방향성이 명확해서, 작은 테이블에서 큰 테이블로의 조인이나, 효율적인 인덱스 사용이 가능할 때 유리하다. | ||
특정 조건에 따라 부분적인 범위만 처리가 가능하다. | ||
Sort-Merge 조인 | 두 테이블을 동시에 처리한다. | - |
전체 데이터 범위에 대해 조인을 수행한다. (특정 조건에 따라 데이터의 일부분을 제외하고 조인하는 것도 가능하다.) |
||
조인 조건의 복잡성에 영향을 받지 않는다. | ||
NL 조인처럼 명확한 Driving 테이블이 없어 조인 방향성이 없다. | ||
조인 수행 전 두 테이블을 정렬해야 하므로 정렬 과정에서 부하가 발생할 수 있다. | ||
정렬이 주로 PGA(Program Global Area) 에서 수행되므로, PGA의 과다 사용이 우려될 수 있다. | ||
해시 조인 | 해시 영역 크기(Hash Area Size)가 중요하다. 해시 영역의 크기가 크면 메모리 내 전체 조인이 이루어질 수 있어서 성능이 크게 향상된다. | OLAP |
등치 조인이 매우 중요하다. | ||
대량 범위를 처리할 때 유리하다. | ||
배치, SP(Stored Procedure) 처리에 유리하다. |
'Archive > SQLD' 카테고리의 다른 글
[SQLD] SQL 기본 (0) | 2024.02.24 |
---|---|
[SQLD] 데이터 모델과 성능 (0) | 2024.02.21 |
[SQLD] 데이터 모델링의 이해 (0) | 2024.02.19 |
[SQLD] 인덱스 (0) | 2024.02.18 |
[SQLD] 윈도우 함수 (0) | 2024.02.13 |