3-4. 인덱스와 조인

  1. 인덱스 기본원리
  2. 인덱스 튜닝
  3. 조인 기본 원리
  4. 고급 조인 기법

 

. Index Range Scan

– 인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 후에 리프 블록을 필요한 범위(Range)만 스캔하는 방식

 

. Index Skip Scan

– 루트 또는 브랜치 블록에서 읽은 칼럼 값 정보를 이용해 조건에 부합하는 레코드를 포함할 “가능성이 있는” 하위 블록(브랜치 또는 리프블록)만 골라서 액세스하는 방식

 

. Index Full Scan

– 수직적 탐색없이 인덱스 리프블록을 처음부터 끝까지 수평적으로 탐색하는 방식으로서, 대개는 데이터 검색을 위한 최적의 인덱스가 없을 때 차선으로 선택

 

. Index Unique Scan

– 수직적 탐색만으로 데이터를 찾는 스캔 방식으로서, Unique 인덱스를 ‘=’ 조건으로 탐색하는 경우 작동

 

. Index Fast Ful Scan

– Index Full Scan보다 빠르고, 인덱스 트리 구조를 무시하고 인덱스 세그먼트 전체를 Multiblock Read 방식으로 스캔하기 때문이다.

 

. 비트맵 인덱스

– Lock에 의한 DML 부하가 심한것이 단점

– 레코드 하나만 변경되더라도 해당 비트맵 범위에 속한 모든 레코드에 Lock이 걸린다.

– OLTP성 환경에 비트맵 인덱스를 쓸 수 없는 이유

– 읽기 위주의 대용량 DW(특히, OLAP) 환경에 적합

 

. 인덱스 설계를 위해 고려해야 할 요소

– 쿼리 수행 빈도

– 업무상 중요도

– 클러스터링 팩터

– 데이터량

– DML부하(기존 인덱스 개수, 초당 DML 발생량, 자주 갱신되는 칼럼 포함 여부 등)

– 저장 공간

– 인덱스 관리 비용 등

 

. 결합 인덱스 구성

– 조건절에 항상 사용되거나, 적어도 자주 사용되는 칼럼들을 선정

– 그렇게 선정된 칼럼 중 ‘=’ 조건으로 자주 조회하는 칼럼을 앞쪽에 두어야 한다.

– 소트 오퍼레이션을 생략하도록 하기위해 칼럼을 추가

 

. Hash Join 성능의 키 포인트

– 한 쪽 테이블이 가용 메모리에 담길 정도로 충분히 작아야 한다.

– Build Input 해시 키 칼럼에 중복 값이 거의 없어야 한다.

 

. Hash Join 선택 기준

– 조인 컬럼에 적당한 인덱스가 없어 NL Join이 비효율적일 때

– 조인 컬럼에 인덱스가 있더라도 NL Join 드라이빙 집합에서 Inner 쪽 집합으로의 조인 액세스량이 많아 Random 액세스 부하가 심할때

– Sort Merger Join 하기에는 두 테이블이 너무 커 소트 부하가 심할 때

– 수행빈도가 낮고 쿼리 수행 시간이 오래 걸리는 대용량 테이블을 조인할 때

 

. Scalar Subquery

– 서브쿼리 중에서 함수처럼 한 레코드당 정확히 하나의 값만을 리턴하는 서브쿼리

– select-list 에서 사용되지만 몇 가지 예외사항을 뺀다면 칼럼이 올 수 있는 대부분 위치에서 사용 가능하다.

 

. 선분이력

– 고객별연체금액 변경이력을 관리할 때 이력의 시작시점만을 관리하는 것을 ‘점이력’ 모델

– 시작시점과 종료시점을 함께 관리하는 것을 ‘선분이력’ 모델

 

. Local 파티션 인덱스

– 테이블 파티션과 1:1로 대응되도록 파티셔닝한 인덱스, 인덱스 파티션 키를 사용자가 따로 지정하지 않으며, 테이블과 1:1 관계를 유지하도록 DBMS가 자동으로 관리

– SQL Server에선 정렬된(aligned) 파티션 인덱스라고 부른다.

 

. Oracle이 지원하는 파티션 유형

– Range 파티셔닝

– 파티션 키 값의 범위(Range)로 분한

– 파티셔닝의 가장 일반적인 형태이며, 주로 날짜 칼럼을 기준으로 함 ex) 판매 데이터를 월별로 분할

 

 – Hash 파티셔닝

– 파티션 키 값에 해시 함수를 적용하고, 거기서 반환된 값으로 파티션 매핑

– 데이터가 모든 파티션에 고르게 분산되도록 DBMS가 관리(각 로우의 저장 위치 예측 불가)

– 파티션 키의 데이터 분포가 고른 칼럼이어야 효과적 ex) 고객번호, 주문일련번호 등

– 병렬처리 시 성능효과 극대화

– DML 경합 분산에 효과적

 

– List 파티셔닝

– 불연속적인 값의 목록을 각 파티션에 지정

– 순서와 상관없이, 사용자가 미리 정한 그룹핑 기준에 따라 데이터를 분할 저장 ex) 판매 데이터를 지역별로 분할

 

 – Composite 파티셔닝   

– Range나 List 파티션 내에 또 다른 서브 파티션(Range, Hash, List) 구성 ex) Range + List 또는 List + Hash 등

– Range나 List 파티션이 갖는 이점 + 각 서브 파티션 구성의 이점

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다