목록hash join (2)
정미나닷컴
NL JOIN- Random access 발생량에 의해 성능이 좌우 -- 고객의 총 수는 10만 명, 납입 방법은 세가지-- 두 테이블 모두 JOIN 컬럼에 인덱스를 갖고 있다고 가정 - 필터 조건이 없는 경우SELECT /*+ use_nl (a b) */ A.납입방법, B.* FROM 납입방법 A, 고객 BWHERE B.납입방법코드 = A.납입방법코드; - 드라이빙 테이블 : 고객 T /*+ leading(b) use_nl(a) */▶ 10만번 + 10만번 = 총 20만번의 Random access - 드라이빙 테이블 : 납입 T /*+ leading(a) use_nl(b) */▶ 3번 + 10만번 = 총 10만 3번의 Random access * 다른 필터 조건이 없는 상황에서는 작은 쪽(=1쪽) 집..
기본 메커니즘 - 둘 중 작은 집합(Build Input)을 읽어 Hash Area에 해시 테이블을 생성하고, 반대쪽 큰 집합(Probe Input)을 읽어 해시 테이블을 탐색하면서 JOIN하는 방식 - 해시 테이블을 생성할 때나 탐색할 때 모두 해시 함수 사용- JOIN 과정에서 발생하는 Random 액세스 부하가 없음 (각각의 집합을 읽는 과정에서는 Random 액세스 발생 가능)- 해시 테이블을 생성하는 비용이 수반되므로 Build Input이 충분히 작아야 효율적* Hash Area는 PGA 메모리에 할당되는데 Build Input이 hash_area_size를 초과하게 되면 디스크 I/O가 추가로 발생하게되므로 성능이 많이 저하됨 declare l_bucket number;beginfor out..