본문 바로가기

스터디/오라클 성능고도화 원리와 해법216

CH02. 조인 원리와 활용 - 03.해시조인 (1)기본 매커니즘 7.3버전에서 처음 소개된 해시 조인은 소트 머지 조인과 NL조인이 효과적이지 못한 상황에 대한 대안으로 개발되었습니다. 해시 조인은 둘 중 작은 집합(Build input)을 읽어 Hash Area에 해시 테이블을 생성하고, 반대쪽 큰 집합(Probe input)을 읽어 해시 테이블을 담색하면서 조인하는 방식입니다. 해시조인은 해시테이블을 생성할 때 해시함수를 사용합니다. 즉, 해시 함수에서 리턴받은버킷 주소로 찾아가서 해시 체인에 엔트리를 연결합니다. 해시 테이블을 탐색할 때도 해시 함수를 사용합니다. 해시 함수에서 리턴받은 버킷 주소로 찾아가서 해시 체인을 스캔하면서 데이터를 찾습니다. 해시 조인은 NL조인처럼 조인과정에서 발생하는 Random 액세스 부하가 없고(양쪽 집합을 읽.. 2020. 5. 28.
CH02. 조인 원리와 활용 - 02.소트 머지 조인 (1)기본 메커니즘 NL 조인을 효과적으로 수행하려면 조인 컬럼에 인덱스가 필요합니다. 만약 적절한 인덱스가 없다면 Inner 테이블을 탐색할 때마다 반복적으로 Full Scan을 수행하므로 비효율적입니다. 그럴때 옵티마이저는 소트머지 조인이나 해시조인을 고려하게 됩니다. 의미는 두 테이블을 각각 정렬한 다음에 두 집합을 머지(merge)하면서 조인을 수행합니다. 아래 두 단계로 진행됩니다. 1.소트단계 : 양쪽 집합을 조인 컬럼 기준으로 정렬합니다. 2.머지단계: 정렬된 양쪽 집합을 서로 머지(merge)합니다. 소트머지 조인은 outer루프와 inner루프가 Sort Area에 미리 정렬해 둔 자료구조를 이용한다는 점만 다르고 실제 조인 오퍼레이션을 수행하는 과정은 NL조인과 다르지 않습니다. NL조.. 2020. 4. 16.
CH02. 조인 원리와 활용 - 01. Nested Loops 조인 (1) 기본 메커니즘 Nested Loop란 중첩 루프문입니다. 아래와 같은 구조를 가지고 있습니다. for outer in 1..100 loop for inner in 1..100 loop dbms_output.put_line(outer||':'||inner); end loop; end loop; 위 중첩 루프문과 같은 수행 구조를 사용하는 NL 조인이 실제 어떤 순서로 데이터를 액세스하는지 아래 PL/SQL문이 잘 설명해 줍니다. begin for outer in (select deptno, empno, rpad(ename,10) ename from emp) loop --outer 루프 for inner in (selkect dbame from dept where deptno = outer.deptn.. 2020. 4. 12.
CH01. 인덱스 원리와 활용 - 09. 비트맵 인덱스 인덱스는 키 값에 해당하는 테이블 레코드를 찾아갈 수 있도록 주소 정보를 제공합니다. 일반적으로 사용되는 B*Tree 인덱스는 테이블 레코드를 가리키는 rowid 목록을 키 값과 함께 저장하는 구조입니다. 테이블에 100개 레코드가 있으면 인덱스에도 100개 rowid를 키 값과 함께 저장합니다. rowid에는 중복 값이 없지만 키에는 중복 값이 있을 수 있습니다. 개념적으로 비트맵 인덱스는 키 값에 중복이 없고, 키 값 별로 하나의 비트맵 레코드를 갖습니다. 그리고 비트맵 상의 각 비트가 하나의 테이블 레코드와 매핑됩니다. 비트가 1로 설정돼 있으면 상응하는 테이블 레코드가 해당 키 값을 포함하고 있음을 의미합니다. (1)기본구조 그림의 아래쪽이 색상 컬럼이 생성한 비트맵 인덱스를 표현한 것인데, 키 .. 2020. 3. 26.