4. 조인 순서의 중요성
2011.03.29 22:39
04 조인 순서의 중요성
?
** 조인 순서에 따라 쿼리 수행 성능이 달라질 수 있다. **
고객 테이블 : 10만 고객 관리
납입방법 테이블 : 신용카드, 자동이체, 지로 세 종류의 납입방법을 관리
양쪽 모두 조인 컬럼에 인덱스를 가지고 있다고 가정한다.
Q) 어떤 테이블을 먼저 드라이빙하는 것이 유리할까?
SELECT /*+ USE_NL(A B) */ A.납입방법명, B.*
FROM 납입방법 A, 고객 B
WHERE B.납입방법코드 = A.납입방법코드
* 필터 조건이 없을 때
NL 조인에서는 무엇보다 RANDOM 액세스 발생량에 의해 성능이 좌우 된다.
CASE1) 고객 테이블을 먼저 드라이빙하는 경우 => 총 20만번의 RANDOM 액세스 발생
SELECT /*+ LEADING(B) USE_NL(A) */ A.납입방법명, B.* FROM 납입방법 A, 고객 B WHERE B.납입방법코드 = A.납입방법코드 CASE2) 납입방법 테이블을 먼저 드라이빙하는 경우 => 총 100,003만번의 RANDOM 액세스 발생 SELECT /*+ LEADING(A) USE_NL(B) */ A.납입방법명, B.* FROM 납입방법 A, 고객 B WHERE B.납입방법코드 = A.납입방법코드 결론 : 다른 필터 조건이 없는 상황에서는 작은 쪽 집합을 드라이빙하는 것이 유리하다. * 필터 조건이 없을 때 조건) 거주지역이 '부산' 인 고객만을 대상으로 조회할 때 부산지역 고객은 전체 중 10%에 해당하는 1만명 고객 테이블 거주지역 컬럼에 인덱스가 있다. CASE1) 고객 테이블을 먼저 드라이빙하는 경우 => 총 3만번의 RANDOM 액세스 발생
SELECT /*+ LEADING(B) USE_NL(A) */ A.납입방법명, B.* FROM 납입방법 A, 고객 B WHERE B.납입방법코드 = A.납입방법코드 AND B.거주지역 = '부산' CASE2) 납입방법 테이블을 먼저 드라이빙하는 경우 => 총 100,003만번의 RANDOM 액세스 발생 SELECT /*+ LEADING(A) USE_NL(B) */ A.납입방법명, B.* FROM 납입방법 A, 고객 B WHERE B.납입방법코드 = A.납입방법코드 AND B.거주지역 = '부산' => 고객 테이블 쪽으로 많은 액세스가 있었지만 거주지역 = '부산' 조건에 의해 90%가량이 버려지므로 비효율이 존재 => 인덱스에 '거주지역' 컬럼을 추가한 경우 : 총 10,003번의 RADNDOM 액세스 발생 결론 : 조인 조건 외에 필터 조건이 있을 때는 인덱스 구성에 따라 유,불리가 경정되며, 비효율이 없게끔 인덱스를 잘 구성해 주기만 한다면 역시 작은 쪽 집합을 드라이빙하는 것이 유리. * 소트 머지 조인과 해시 조인의 경우
소트 머지 조인 : 디스크소트가 발생할 정도의 큰 테이블을 포함할 때는 큰 테이블을 드라이빙하는 것이 좋다. 메모리소트방식으로 조인할 때는 작은 쪽 테이블을 드라이빙하는 것이 조금 더 빠르다.? 해시 조인 : HASH AREA에 BUILD INPUT을 모두 채울 수 있느냐가 관건이므로 두말할 것도 없이 작은 쪽 테이블을 드라이빙하는 것이 유리하다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
55 |
Front Page
![]() | 운영자 | 2011.02.16 | 114690 |
54 | 2. 인덱스 기본 원리 | balto | 2011.02.17 | 18924 |
53 | 1장. 인덱스 원리와 활용 | 휘휘 | 2011.02.20 | 6862 |
52 |
4. 테이블 Random 액세스 부하
![]() | 휘휘 | 2011.02.26 | 7019 |
51 | 5. 테이블 Random 액세스 최소화 튜닝 | 휘휘 | 2011.02.26 | 9579 |
50 | 6. IOT, 클러스터 테이블 활용 | 오예스 | 2011.02.26 | 15827 |
49 |
7. 인덱스 스캔 효율
![]() | 휘휘 | 2011.03.06 | 8565 |
48 | 9. 비트맵 인덱스 | 휘휘 | 2011.03.06 | 5070 |
47 | 8. 인덱스 설계 | AskZZang | 2011.03.09 | 5797 |
46 | 2. 소트 머지 조인 | 오예스 | 2011.03.20 | 7950 |
45 | 3. 해시 조인 | 휘휘 | 2011.03.20 | 6597 |
44 | 2장. 조인 원리와 활용 | 운영자 | 2011.03.22 | 3355 |
43 |
1. Nested Loops 조인
![]() | 오라클잭 | 2011.03.22 | 23092 |
42 |
6. 스칼라 서브쿼리를 이용한 조인
![]() | balto | 2011.03.26 | 19027 |
41 |
5. Outer 조인
![]() | 휘휘 | 2011.03.28 | 17733 |
40 |
1. 인덱스 구조
![]() | 운영자 | 2011.03.29 | 16010 |
» | 4. 조인 순서의 중요성 | AskZZang | 2011.03.29 | 5375 |
38 | 7. 조인을 내포한 DML 튜닝 | 오예스 | 2011.04.03 | 10024 |
37 | 8. 고급 조인 테크닉-2 | 오라클잭 | 2011.04.04 | 12643 |
36 |
8. 고급 조인 테크닉-1
![]() | 휘휘 | 2011.04.05 | 6510 |