[Oracle] 인덱스(Index) 클러스터 테이블(Clustered Table) 생성 방법

728x90

인덱스(Index) 클러스터 테이블(Clustered Table) 생성 과정

1) 클러스터 생성

SQL>
CREATE CLUSTER dept_emp_cluster (
  dept_id NUMBER
)
TABLESPACE users
SIZE 512;

Cluster created.

 

 dept_id는 클러스터 키이며, 여러 테이블이 이 키를 공유해 같은 블록에 저장됩니다.

2) 클러스터 인덱스 생성(필수)

SQL>
CREATE INDEX idx_dept_emp_cluster
ON CLUSTER dept_emp_cluster
TABLESPACE users;

Index created.
  • 클러스터 키로 데이터를 찾기 위해 인덱스가 필요합니다 (Index Cluster인 경우)
  • 만약 클러스터 인덱스를 생성하지 않고, 클러스터 테이블을 생성하게 되면
    클러스터 테이블 사용 시 ORA-02032 에러가 발생합니다.
    (ORA-02032: clustered tables cannot be used before the cluster index is built)

3) 클러스터 테이블 생성

CREATE TABLE departments (
  dept_id NUMBER PRIMARY KEY,
  dept_name VARCHAR2(100)
) 
CLUSTER dept_emp_cluster (dept_id);

CREATE TABLE employees (
  emp_id NUMBER PRIMARY KEY,
  emp_name VARCHAR2(100),
  dept_id NUMBER,
  CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id)
    REFERENCES departments(dept_id)
) 
CLUSTER dept_emp_cluster (dept_id);
  • 두 테이블 모두 클러스터에 종속되며, dept_id를 기준으로 같은 블록에 저장됩니다.
  • 클러스터 키는 반드시 모든 테이블에 존재해야 합니다.
  • 클러스터 테이블은 클러스터가 속한 테이블스페이스에 포함됩니다.

참고사항

항목 설명
SIZE Oracle이 한 클러스터 키에 몇 개의 행이 저장될지 예측할 수 있도록 힌트
INDEX Index Cluster에서는 반드시 필요
HASH CLUSTER 별도로 CREATE CLUSTER ... HASHKEYS n 구문 사용

 

728x90