[DB] - 결합 알고리즘과 성능 (6장) #107
Unanswered
Irisation23
asked this question in
c. Database
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
0. 결합 알고리즘과 성능
이번 정리는 결합 연산에 사용되는 알고리즘에 포커싱한다.
옵티마이저
가결합 연산의 알고리즘을 선택
하며 크게 3종류이며 아래와 같다.옵티마이저가 어떤 알고리즘을 선택할지 여부는
데이터 크기
또는결합 키의 분산
이라는 요인에 의존한다.1. Nested Loops
1.1 Nested Loops의 작동
네이밍 그대로 중첩 반복을 사용하는 알고리즘이다.
SQL에서 결합은 한 번에 두 개의 테이블만 결합하므로 본질적으로 이중 반복과 같은 의미이다.
1.2 Nested Loops의 동작 원리
1.3 Nested Loops의 특징
메모리 소비가 적다
.이중 반복의 외측과 내측의 반복 처리가 비대칭이라는 점에 주목해야한다.
1.4 구동 테이블의 중요성
위에서 말했던
구동 테이블이 작을수록 Nested Loops의 성능이 좋아진다.
왜 그럴까?
위의 말은 암묵적인 전제가 있다. 바로
내부 테이블의 결합 키 필드에 인덱스가 존재한다면, 해당 인덱스를 통해 DBMS는 내부 테이블을 완전히 순화하지 않아도 된다.
달리 말하면 내부 테이블의 반복을 어느 정도 건너뛸 수 있게 된다.
하지만 반대로 말하면 물리 ER 모델과 인덱스를 설정할 때, 어떤 테이블을 내부 테이블로 하고, 어떤 결합 키에 인덱스를 작성해야 하는지를 초기 단계 부터 고민해야 한다는 뜻이다.
1.5 Nested Loops의 단점
'구동 테이블이 작은 Nested Loops' + '내부 테이블의 결합 키에 인덱스' 조합만 있다면 성능이 충분하다고 생각할 수있다.
하지만 기대만큼 성능을 개선시키지 못할 수 있는데 그 이유는 결합 키로 내부 테이블에 접근할 때 히트되는 레코드가 너무 많을 때이다.
한개의 테이블ID에 수 많은 레코드가 히트된다면 내부 테이블에 대해 반복 횟수가 많아져
Nested Loops
의 성능이 낮아진다.이 문제에 대처하는 방법은 두 가지이다.
해시
의 사용이다.2. Hash
2.1 Hash의 작동
Hash는
입력
에 대해 어느 정도유일성
과균일성
을 가진 값을 출력하는 함수를 해시라고 한다.해시 결합은 일단 작은 테이블을 스캔하고, 결합 키에 해시 함수를 적용해서 해시값으로 변환한다.
이어서 다른 테이블(큰 테이블)을 스캔하고, 결합 키가 해시값에 존재하는지를 확인하는 방법으로 결합을 수행한다.
작은 테이블에서 해시 테이블을 만드는 이유는, 해시 테이블은 DBMS의 워킹 메모리에 저장되므로 작은 것이 효율적이기 때문이다.
2.2 Hash의 특징
Hash의 주요 특징은 다음과 같다.
2.3 Hash가 유용한 경우
Nested Loops
의 단점에서 본 것처럼 구동 테이블로 사용할만한 작은 테이블은 있지만, 내부 테이블에서 히트되는 레코드 수가 너무 많은 경우Nested Loops가 효율적으로 작동하지 않는 경우의 차선책이 Hash이다.
2.4 Hash 사용 시 주의해야 할 점
3. Sort Merge
3.1 Sort Merge의 작동
Merge 또는 Merge Join이라 부른다.
Sort Merge는 결합 대상 테이블들을 각각 결합 키로 정렬하고, 일치하는 결합 키를 찾으면 결합한다.
3.2 Sort Merge의 특징
<>
부정 조건에서는 불가능하다.3.3 Sort Merge가 유효한 경우
테이블 정렬을 생략할 수 있는 (상당히 예외적인) 경우에 고려해볼 만하지만, 그 이외에는 Nested Loops와 Hash를 우선적으로 고려해야한다.
Beta Was this translation helpful? Give feedback.
All reactions