반응형
안녕하세요.
오늘은 Oracle의 인덱스 클러스터 테이블과 해시 클러스터 테이블에 대하여 알아보겠습니다.
Oracle에서 인덱스 클러스터 테이블과 해시 클러스터 테이블은 데이터 클러스터링의 방법과 성능 최적화를 위한 테이블 유형입니다.
1. 인덱스 클러스터 테이블
- 정의: 동일한 클러스터 키를 가진 데이터가 물리적으로 인접한 위치에 저장되도록 구성된 테이블입니다. 클러스터 키는 별도의 인덱스로 관리됩니다.
- 특징:
- 데이터 저장: 클러스터 키를 기준으로 데이터가 그룹화됩니다.
- 검색 성능: 클러스터 키를 사용하는 쿼리의 경우 성능이 향상됩니다.
- 인덱스 필요: 클러스터 키에 대해 별도의 인덱스가 필요하며, 이를 통해 데이터 검색이 이루어집니다.
- 공간 효율성: 클러스터링되지 않은 테이블에 비해 저장 공간을 덜 사용할 수 있습니다.
- 적용 시나리오:
- 클러스터 키를 기준으로 데이터를 자주 조회하는 경우.
- 다수의 테이블이 동일한 클러스터 키를 공유하며, 조인 쿼리가 빈번한 경우.
2. 해시 클러스터 테이블
- 정의: 클러스터 키의 해시 값을 이용해 데이터를 저장 위치에 직접 매핑하는 방식으로 구성된 테이블입니다. 데이터 검색에 인덱스가 필요하지 않습니다.
- 특징:
- 데이터 저장: 클러스터 키의 해시 값을 기반으로 데이터 저장 위치를 계산합니다.
- 검색 성능: 특정 클러스터 키에 대해 빠르게 데이터 접근이 가능합니다.
- 인덱스 불필요: 클러스터 키에 대한 해시 매핑으로 데이터 위치를 직접 결정하므로 인덱스를 사용하지 않습니다.
- 공간 효율성: 해시 충돌을 방지하기 위해 적절한 크기의 공간을 사전에 할당해야 하며, 과도한 공간 할당이 비효율을 초래할 수 있습니다.
- 적용 시나리오:
- 클러스터 키를 기준으로 데이터를 단건 조회하는 경우.
- 데이터 추가나 삭제가 빈번하지 않고, 해시 충돌을 최소화할 수 있는 경우.
3. 생성 방법
3_1. 인덱스 클러스터 테이블 생성 방법
-- 클러스터 생성
CREATE CLUSTER emp_cluster (dept_id NUMBER) SIZE 1024;
-- cluster_name: 클러스터의 이름.
-- column_name: 클러스터 키.
-- SIZE: 데이터 저장 크기 (평균 데이터 크기에 따라 설정).
-- 클러스터 테이블 생성
CREATE TABLE employees (
emp_id NUMBER,
name VARCHAR2(50),
dept_id NUMBER
) CLUSTER emp_cluster (dept_id);
--테이블이 클러스터에 속하도록 설정.
-- 클러스터 인덱스 생성
CREATE INDEX emp_cluster_idx ON CLUSTER emp_cluster;
--인덱스를 통해 클러스터 키 관리.
3_2. 해시 클러스터 테이블 생성 방법
-- 클러스터 생성
CREATE CLUSTER emp_hash_cluster (dept_id NUMBER) SIZE 1024 HASHKEYS 100;
--HASHKEYS: 해시 버킷 수 (적절한 키 분포를 위해 설정).
-- 클러스터 테이블 생성
CREATE TABLE employees (
emp_id NUMBER,
name VARCHAR2(50),
dept_id NUMBER
) CLUSTER emp_hash_cluster (dept_id);
--테이블이 해시 클러스터에 속하도록 설정.
4. 간략 정리 및 주의사항
* 해시 클러스터에서는 별도의 인덱스 생성이 필요 없습니다. 해시 키를 통해 직접 데이터 위치를 찾습니다.
2. 간략 정리
항목 | 인덱스 클러스터 테이블 | 해시 클러스터 테이블 |
클러스터 키 관리 | 인덱스를 사용해 관리 | 해시 함수를 사용해 관리 |
데이터 접근 방식 | 인덱스 탐색 후 데이터 조회 | 해시 계산으로 직접 데이터 위치 확인 |
적합한 쿼리 유형 | 범위 검색, 조인 | 단건 검색 |
공간 관리 | 효율적 (인덱스 기반) | 초기 할당 크기가 적절하지 않으면 비효율적 |
설정 복잡도 | 상대적으로 쉬움 | 적절한 해시 함수와 크기 설정이 필요 |
데이터 삽입 성능 | 삽입 시 인덱스 유지 필요 | 해시 충돌 시 재배치 필요 |
감사합니다.
반응형
'Database' 카테고리의 다른 글
[ Oracle ] Nested Loop Join,Sort-Merge Join,Hash Join의 비교 (0) | 2025.01.08 |
---|---|
[ Oracle ] PL/SQL과 내장 함수 및 SQL의 비교 (2) | 2025.01.03 |
[ Oracle ] index에 대하여.. (2) | 2024.12.27 |
[ SQL ] Hint에 대하여 알아보자 (feat.Oracle) (1) | 2024.12.23 |
Oracle DELETE쿼리와 TRUNCATE차이는? (0) | 2024.11.29 |