새로 쓴, 대용량 데이터베이스 솔루션 vol.1을 공부하며 여기에 정리해본다.
인덱스 분리형 테이블의 구조
- 익히 알다시피 키(인덱스)와 데이터를 분리해서 저장하는 기법
- 한 블록 내에서 로우가 이동하게 되는 경우는 ROWID가 변경되지 않아도 되나 블록 외부로 옮겨지면 ROWID가 변경되어야 한다.
- 물론 이 경우 ROWID를 유지시킬 수 있는 방법이 있는데, 기존 ROWID위치에 새로 이사간 주소를 남겨놓는 방식이다. 이를 이주(Migration)라고 한다.
- row size가 너무 커서 여러 블록에 걸쳐 저장되는 경우가 있는데, 이를 체인(Chain)이라 하면 ‘체인이 발생했다’라고 한다.
클러스터링 팩터
- 물리적으로 저장된 데이터에 엑세스하는데 들어가는 비용
- 인덱스로 지정한 컬럼에 대해서는 빠르지만 그 외 컬럼에 대해서는 마찬가지로 느리다.
- 클러스터링 팩터를 좋게 만들기 위하여 수개월에 한 번씩 조각모음 작업 같은 것을 해주는 방법도 있다.
ü 실제로는 테이블 재생성을 한다.
ü 테이블 재생성 시에는 인덱스를 모두 제거한 후 PK가 될 컬럼으로 정렬조건을 주고 작업해야 한다.(속도 및 인덱스 저장 밀도를 좋게 하기 위하여)
ü 효과 - 테이블 응집도 향상, 체인 감소, 블록 내 데이터 저장율 향상, 인덱스의 저장구조 개선
인덱스 일체형 테이블의 특징
- ROWID가 없는 인덱스-데이터 일체형 테이블
- 기본키가 반드시 필요
- 인덱스 세그먼트에 테이블의 본체가 저장됨
- 해쉬 클러스터링 – 이는 일체형 테이블이 아닐걸?
ü 기본키 컬럼을 ‘=’로 액세스 하는 경우를 효율화
- 오버플로우 영역
ü 일체형 테이블 컬럼 중 ‘INCLUDING’ 절을 이용하여 지정한(자주 사용하지 않는) 컬럼을 저장하는 영역
ü 이 컬럼들은 오버플로우 영역에 저장되며 이는 테이블 세그먼트에 저장됨을 의미한다.
ü 오버플로우 영역의 데이터를 찾기 위해 인덱스 영역에는 ROWID가 생성되므로 결과적으로 분리형 테이블과 매우 비슷한 형태가 된다.
- 넓은 범위에서 테이블 데이터 액세스에 탁월한 효과
- 코드 테이블, OLAP의 디멘젼 등에 효과
랜덤 액세스
- 인덱스가 아닌 컬럼에 접근하는 것