옵티마이저가 어떤 알고리즘을
선택할지는 데이터 크기, 결합키의 분산이라는
요인에 의존한다.
1.Nested Loops
2.Hash
3.Sort Merge
Nested Loops는 이름 그대로 중첩 반복을
사용하는 알고리즘이다.
특징
1. 대상테이블에서 레코드를 하나씩 반복해서 스캔한다.
이 테이블을 구동테이블(driving table) 또는 외부테이블이라고 부른다.
다른 테이블은 내부테이블 이라고 부른다.
2.. 구동테이블은 레코드 하나마다 내부 테이블의 레코드를 하나씩
스캔해서 결합조건에 맞으면 리턴한다.
3. 모든 레코드에 반복한다.
Nested Loops의 실행시간은 레코드 수에 비례한다
첫번째 단계에서 레코드 수가 적으면 Hash, Sort Merge에 비해
메모리 소비가 적다
Nested Loops는 단순해 보일지는 몰라도
결합 성능에서 가장 중요하다고 볼 수도 있다.
구동테이블(driving table)이 작을수록 성능이 좋아진다.
결합되는 내부테이블에 인덱스가 존재한다면
결합키필드에 인덱스가 존재한다면
해당 인덱스를 통해 내부 테이블을 전부 순환하지 않아도 된다
단점
결합키로 내부 테이블에 접근시 조인시 히트되는 레코드가
많은 경우 결합키가 내부 테이블에 유일하지 않을 경우
기대만큼 응답시간이 나오지 않을 수 있다.
절대적인 양이 많으면 반복이 많이 일어나기 때문이다.
Hash
조인되는 두개의 테이블의 해시결합테이블을 생성
해시결합은 일단 작은 테이블을 스캔하고
결합키에 해시 함수를 적용후 해시값으로 변환한다
이후 다른 테이블을 스캔하고 키가 해시값에
존재하는지를 확인한다.
1. 결합 테이블로부터 해시테이블을 만들어 활용하기 때문에
메모리를 크게 소모한다.
2. 메모리 부족시 지연이 발생가능
3. 해시값은 입력값의 순서를 모르므로 등치결합에만 사용
'데이터' 카테고리의 다른 글
크로스 조인 (0) | 2022.10.28 |
---|---|
데이터 정규화 간단 정리 (0) | 2022.10.26 |
SQLD 도전 이야기 (0) | 2022.10.11 |
정보계 모델링 다차원 모델을 알아보자 (0) | 2020.07.23 |
데이터베이스 SQL 조인 (0) | 2020.05.31 |
댓글