본문 바로가기

DB

[책정리] 인덱스 분리형 테이블과 일체형 테이블

새로 쓴, 대용량 데이터베이스 솔루션 vol.1을 공부하며 여기에 정리해본다.


인덱스 분리형 테이블의 구조

-      익히 알다시피 키(인덱스)와 데이터를 분리해서 저장하는 기법

-      한 블록 내에서 로우가 이동하게 되는 경우는 ROWID가 변경되지 않아도 되나 블록 외부로 옮겨지면 ROWID가 변경되어야 한다.

-      물론 이 경우 ROWID를 유지시킬 수 있는 방법이 있는데, 기존 ROWID위치에 새로 이사간 주소를 남겨놓는 방식이다. 이를 이주(Migration)라고 한다.

-      row size가 너무 커서 여러 블록에 걸쳐 저장되는 경우가 있는데, 이를 체인(Chain)이라 하면 ‘체인이 발생했다’라고 한다.

클러스터링 팩터

-      물리적으로 저장된 데이터에 엑세스하는데 들어가는 비용

-      인덱스로 지정한 컬럼에 대해서는 빠르지만 그 외 컬럼에 대해서는 마찬가지로 느리다.

-      클러스터링 팩터를 좋게 만들기 위하여 수개월에 한 번씩 조각모음 작업 같은 것을 해주는 방법도 있다.

ü  실제로는 테이블 재생성을 한다.

ü  테이블 재생성 시에는 인덱스를 모두 제거한 후 PK가 될 컬럼으로 정렬조건을 주고 작업해야 한다.(속도 및 인덱스 저장 밀도를 좋게 하기 위하여)

ü  효과 - 테이블 응집도 향상, 체인 감소, 블록 내 데이터 저장율 향상, 인덱스의 저장구조 개선

인덱스 일체형 테이블의 특징

-      ROWID가 없는 인덱스-데이터 일체형 테이블

-      기본키가 반드시 필요

-      인덱스 세그먼트에 테이블의 본체가 저장됨

-      해쉬 클러스터링 이는 일체형 테이블이 아닐걸?

ü  기본키 컬럼을 ‘=’로 액세스 하는 경우를 효율화

-      오버플로우 영역

ü  일체형 테이블 컬럼 중 ‘INCLUDING’ 절을 이용하여 지정한(자주 사용하지 않는) 컬럼을 저장하는 영역

ü  이 컬럼들은 오버플로우 영역에 저장되며 이는 테이블 세그먼트에 저장됨을 의미한다.

ü  오버플로우 영역의 데이터를 찾기 위해 인덱스 영역에는 ROWID가 생성되므로 결과적으로 분리형 테이블과 매우 비슷한 형태가 된다.

-      넓은 범위에서 테이블 데이터 액세스에 탁월한 효과

-      코드 테이블, OLAP의 디멘젼 등에 효과

랜덤 액세스

-      인덱스가 아닌 컬럼에 접근하는 것