조인 순서에 따라 쿼리 수행 성능이 달라질 수 있습니다.
각 조인에 대해서 살펴보겠습니다.
NL조인
NL조인에서는 무엇보다 Random 액세스 발생량에 의해 성능이 좌우되는데,
필터조건이 없는 경우에는 드라이빙테이블(조인시 먼저 ACCESS되는 테이블)은 작은 쪽 집합을 드라이빙하는 것이 유리합니다.
필터 조건이 있는 경우에는 인덱스 구성에 따라 유,불리가 경정되며, 비효율이 없게끔 인덱스를 잘 구성해 주기만 하면 역시 작은 쪽 집합을 드라이빙하는 것이 유리합니다.
NL조인에서는 Random액세스 발생량 외에도 Inner 쪽 인덱스 구성 및 조건절 연산자 형태에 따라 성능이 크게 좌우되는데, 인덱스 스캔 효율에 차이가 생기기 때문입니다.
소트머지 조인과 해시 조인
소트머지 조인과 해시조인에서도 순서가 중요합니다.
소트머지 조인은 PGA상에서 정렬된 집합(Sort Area)을 통해 조인 액세스가 일어나기 때문에 Random 액세스 발생량보다는 소트 부하에 의해 성능이 결정됩니다. 즉, 디스크 소트가 발생할 정도의 큰 테이블을 포함할 때는 큰 테이블을 드라이빙하는 것이 빠르지만 메모리 소트방식으로 조인할 때는 적은 쪽 테이블을 드라이빙하는 것이 조금 더 빠릅니다.
해시조인은 Hash Area에 Build Input을 모두 채울 수 있느냐가 관건이므로 작은 쪽 테이블을 드라이빙하는것이 유리합니다.
※세 개 이상 테이블에 대한 조인문 기술할 때 주의사항
조인 컬럼에 대한 상수나 변수 조건은 조인문을 타고 다른 쪽 테이블 조건으로도 전이됩니다. 하지만 조인문 자체는 그런작용이 일어나지 않으므로 세 개 이상 테이블에 대한 조인문을 기술할 때 주의가 필요합니다.
예를들어 A와 B간의 조인,B와 C간의 조인조건을 이용해 A와 C간의 조인 조건이 내부적으로 생성된다면 조인 순서가 어떻게 결정되더라도 효과적으로 수행될 수 있습니다. 하지만 조인 조건은 그런 식의 전이가 이루어지지 않으므로 사용자가 최적의 조인순서를 결정하고 그 순서에 따라 조인문을 기술해 주는 것이 매우 중요합니다.
'스터디 > 오라클 성능고도화 원리와 해법2' 카테고리의 다른 글
04 쿼리변환 - 서브쿼리 Unnesting (0) | 2021.08.30 |
---|---|
CH02. 조인 원리와 활용 - 05.Outer 조인 (0) | 2020.06.02 |
CH02. 조인 원리와 활용 - 03.해시조인 (0) | 2020.05.28 |
CH02. 조인 원리와 활용 - 02.소트 머지 조인 (0) | 2020.04.16 |
CH02. 조인 원리와 활용 - 01. Nested Loops 조인 (5) | 2020.04.12 |
댓글