[Oracle] 클러스터 테이블(Clustered Table)에 대해

728x90

1) 클러스터 구조와 기본 개념

클러스터(Cluster)

  • 클러스터는 하나 이상의 테이블이 공유하는 저장 공간 구조입니다.
  • 클러스터 키를 기준으로 동일한 값을 가지는 데이터들이 같은 데이터 블록에 저장됩니다.

클러스터 테이블(Clustered Table)

  • 클러스터 내부에 속한 테이블입니다.
  • 클러스터 키는 테이블 간 관계를 나타내며, 자주 조인되는 컬럼으로 설정합니다.
  • 일반 테이블과 달리, 클러스터가 존재해야만 생성 가능합니다.

2) 동작 원리 (Index Cluster 기준)

예시: departments, employees 테이블이 dept_id 로 조인되는 경우

  1. 클러스터 생성(클러스터 키 = dept_id)
  2. 클러스터 인덱스 생성
  3. departments, employees 테이블을 클러스터에 포함시켜 생성
  4. dept_id = 10 인 부서와 소속된 모든 직원이 같은 블록에 저장됨
  5. SELECT * FROM employees e JOIN departments d ON e.dept_id = d.dept_id 수행 시
    클러스터 키 dept_id 를 사용해 단 하나의 블록을 읽어서 관련 행을 모두 가져옴 → I/O 감소

3) 내부 저장 구조

데이터 블록 예시 (Cluster Block)
┌───────────────┐
│ dept_id = 10  │ ← 클러스터 키
├───────────────┤
│ departments   │
│ → dept_id=10  │
│ → dept_name=X │
├───────────────┤
│ employees     │
│ → emp_id=100  │
│ → emp_name=Y  │
│ → dept_id=10  │
│ ...           │
└───────────────┘
  • 이처럼 관련 데이터가 물리적으로 인접하게 저장되어 디스크 I/O 성능 향상이 기대됩니다.

4) 데이터 접근 방식

작업 유형 동작 방식
INSERT 클러스터 키의 Index / Hash를 통해 적절한 블록에 삽입
SELECT (조인) 클러스터 키로 블록 한 개만 읽으면 두 테이블의 데이터 동시 조회 가능
UPDATE / DELETE 클러스터 키 기반으로 위치 탐색 후 작업 수행
FULL SCAN 일반 테이블보다 비효율적일 수 있음 (블록 당 데이터 밀도 ↑)

5) 성능 특성

장점 단점
자주 조인되는 테이블의 I/O 감소 → 빠른 조회 클러스터 키가 자주 변경되면 오버헤드 ↑
공간 절약 (중복 키 저장 X) DML 성능은 다소 떨어질 수 있음
클러스터 키 기반 데이터 지역성 확보 테이블 drop/recreate 제약 있음

6) 클러스터의 두 가지 방식 비교

구분 Index Cluster Hash Cluster
구조 클러스터 키 인덱스를 통해 블록 찾음 클러스터 키 → 해시 함수 → 블록 직접 계산
장점 유연하고 일반적 고속 랜덤 액세스
단점 인덱스 필요 크기 조정 어려움 (공간 미리 할당)

7) 관련 뷰

설명
DBA_CLUSTERS 클러스터 정의
DBA_TABLES CLUSTER_NAME 컬럼으로 클러스터 테이블 여부 확인
DBA_INDEXES TABLE_NAME 컬럼으로 클러스터 인덱스 여부 확인

 

728x90