정미나닷컴
[Oracle] 오라클 IOT, Index-Organized Table, 클러스터 테이블 본문
IOT (Index-Organized Table)
- Table Random Access가 발생하지 않도록 처음부터 인덱스 구조로 생성된 테이블
- Index leaf block = data block (모든 행 데이터를 리프 블록에 저장)
- 정렬상태를 유지하며 데이터를 삽입(PK 컬럼 순)
CREATE TABLE INDEX_ORG_T (
A NUMBER PRIMARY KEY,
B VARCHAR(10)
)
ORGANIZATION INDEX;
-- 일반적으로 사용되는 테이블은 '힙 구조 테이블'로 ORGANIZATION HEAP; 이 생략되어 있는 것
장점
- 클러스터링 팩터가 좋음
- Random이 아닌 Sequential Access 방식이므로 넓은 범위 access 시 유리
- PK 인덱스를 위한 별도의 세그먼트 생성 불필요
단점
- DML 시 인덱스 분할로 인한 부하 발생 (PK 이외의 컬럼수가 많을수록 성능 저하)
- Direct Path Insert 불가
IOT의 활용
- 크기가 작고 NL JOIN으로 반복 Lookup하는 테이블 (ex: 공통 Code 테이블)
- 폭이 좁고 긴(=로우 수가 많은) 테이블
- 넓은 범위를 주로 검색하는 테이블 (주로 Between, Like 같은 조건으로 검색, 통계성 테이블)
- 데이터 입력과 조회 패턴이 서로 다른 테이블 (ex: 입력은 일자별, 조회는 사원별)
Partitioned IOT
- 넓은 범위의 거래일자를 기준으로 특정 상품을 조회하는 쿼리가 자주 수행되는 테이블
- 거래일자 기준 Range 파티셔닝
- [상품번호 + 거래일자] 순으로 PK를 정의하고, IOT 구성
Secondary 인덱스
* IOT는 secondary 인덱스 추가 가능성이 크지 않을 때만 선택하는 것이 바람직
① physical guess를 통해 IOT 레코드 access
② PK를 통해 IOT 레코드 access
- 상황에 따라 다른 방식으로 IOT access
- IOT 레코드의 위치는 영구적이지 않기 때문에 secondary index가 IOT 레코드를 가리킬 때 물리적 주소 대신 Logical RowID 사용
- Logical RowID = PK + physical guess
( physical guess: secondary 인덱스를 최초 생성하거나 재생성한 시점에 IOT 레코드가 위치했던 DBA, 갱신X )
인덱스 클러스터 테이블
- 클러스터 키 값이 같은 레코드들을 한 블록에 모이도록 저장 (넘치면 새 블록 & 클러스터 체인 연결)
- 물리적으로 같은 블록에 여러 테이블의 레코드 저장 가능 (서로 Join된 상태로 저장->다중 테이블 인덱스 클러스터)
- 클러스터 인덱스는 해당 키 값을 저장하는 첫 데이터 블록만 가리킴
- Key : Record = 1 : M
- 클러스터링 팩터가 매우 좋음
'IT' 카테고리의 다른 글
[Oracle] 오라클 인덱스 단편화, Index Fragmentation (0) | 2017.10.22 |
---|---|
[Oracle] 오라클 인덱스 스캔효율 (0) | 2017.10.15 |
[Oracle] 오라클 Hash JOIN, 해시 조인 (1) | 2017.09.23 |
[Oracle] 오라클 Sort Merge JOIN, 소트 머지 조인 (0) | 2017.09.23 |
[Oracle] 오라클 Nested Loops JOIN, NL 조인 (0) | 2017.09.22 |