본문 바로가기

성능고도화54

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.
CH01. 인덱스 원리와 활용 - 08. 인덱스 설계 SQL 각각을 위해 최적화된 인덱스를 모두 생성할 수 있다면 SQL튜닝과 인덱스 설계만큼 쉬운 것도 없습니다. 하지만 그런식으로 인덱스를 생성하다 보면 테이블마다 수십 개씩 달릴 것이고 관리비용뿐 아니라 시스템 부하를 가중시키는 원인이 됩니다. 인덱스 설계가 어려운 이유가 여기에 있으며, 시스템 전체를 바라보는 시각에서 전략적으로 접근하려는 노력이 중요합니다. (1) 가장 중요한 두 가지 선택 기준 인덱스 스캔 방식에 여러 가지가 있지만 가장 정상적이고 일반적인 것은 Index Range Scan입니다. 그리고 이를 위해서는 인덱스 선두 컬럼이 조건절에 반드시 사용되어야 합니다. 따라서 결합 인덱스를 구성할 때 첫 번째 기준은 조건절에 항상 사용되거나, 적어도 자주 사용되는 컬럼들을 선정하는 것입니다. .. 2020. 3. 8.