- 클러스터
테이블의 데이터를 저장하는 방법으로서, 클러스터 키라고 부르는 공통된 칼럼을 기준으로 하나 이상의 테이블 데이터를 동일한 데이터 블록에 모아서 저장하는 기능
- 인덱스가 필수로 존재, 분포도가 나쁠수록 성능이 뛰어남
- 데이터가 대용량일 경우, PARTITION화
- 클러스터 인덱스를 생성하기 전에는 어떤 DML문장도 실행되지 않음
- 검색 효율을 높이나 DML(INSERT) 실행시 오버헤드 발생
- 클러스터 인덱스를 DROP하면 QUERY 실행 X
- 테이블스페이스를 변경하려면 DROP후 재생성
○ 선정기준
① 6블록 이상의 데이터를 지닌 테이블
② 다량의 범위를 자주 ACCESS하는 경우
③ 분포도가 나빠 인덱스를 사용한 처리가 부담될 경우
④ 여러 테이블이 빈번히 조인될 경우
⑤ 반복 칼럼이 정규화를 통해 분할된 경우
⑥ UNIION, DISTINCT, ORDER BY, GROUP BY 가 빈번히 사용된 칼럼
⑦ 수정이 자주 발생되지 않는 칼럼
⑧ 처리범위가 넓어 문제가 되는 경우 => 단일 테이블 클러스터링
⑨ 조인이 많아 문제가 되는 경우 => 다중 테이블 클러스터링
- Cluster 생성
클러스터는 다수개의 테이블을 하나의 오라클 블록에 저장하는 메커니즘이며, 클러스터 인덱스를 꼭 필요로 한다.
EX)
다음은 클러스터와 그 클러스터 인덱스를 생성하고, 클러스터 테이블을 생성하는 예제로, 예를 들어 IDNUM 컬럼을 공유하는 두 테이블 T1과 T2가 있다고 가정하고, 이들을 클러스터링 하려고 한다면 다음과 같을 것이다.
1. 클러스터를 생성한다.
CREATE CLUSTER cluster (column data_type, ... )
[PCTUSED int]
[PCTFREE int]
[INITRANS int]
[MAXTRANS int]
[SIZE int [K or M]]
[TABLESPACE tablespace]
[STORAGE storage_clause]
- PCTUSED & PCTFREE : 오직 클러스터 그 자체에 적용되는 block 파라미터
- SIZE: Cluster와 그 해당 데이터 행을 모두 저장하기 위해 필요한 스페이스를 나타낸다.
CREATE CLUSTER cluster_T1_T2 (IDNUM NUMBER(3))
SIZE 400
TABLESPACE DATA1
STORAGE (INITIAL 30K);
Cluster created.
2. 클러스터 인덱스를 생성한다.
CREATE INDEX index
ON CLUSTER cluster
[INITRANS int]
[MAXTRANS int]
[TABLESPACE tablespace]
[STORAGE storage_clause]
[PCTFREE int]
[NOSORT]
- 클러스터 인덱스의 생성은 일반 인덱스 생성과 크게 다르지 않으며 CREATE INDEX 뒤에 ON CLUSTER 옵션을 붙여서 클러스터 인덱스 생성임을 명시한다.
- 클러스터 인덱스의 생성도 일반 인덱스 생성과 같이 PCTUSED를 사용할 수 없다.
CREATE INDEX ind_cluster_T1_T2
ON CLUSTER cluster_T1_T2
TABLESPACE IDX1;
Index created.
3. 클러스터 테이블들을 생성한다
일반 테이블 생성방법과 같으며 뒤에 사용할 클러스터 명을 명시하여 생성한다.
CREATE TABLE T1 (name VARCHAR2(10),
hire_date DATE,
IDNUM NUMBER(3)
)
CLUSTER cluster_T1_T2 (IDNUM);
Table created.
CREATE TABLE T2 (
IDNUM NUMBER(3),
idname VARCHAR2(10)
)
CLUSTER cluster_T1_T2 (IDNUM);
Table created.
이렇게 생성된 테이블 T1과 T2의 데이터는 같은 데이터 블록에 저장되게 된다.
- Cluster 삭제
클러스터의 삭제 전에 클러스터화된 테이블의 삭제가 먼저 이루어 지는 것이 좋다.
DROP CLUSTER SQL문 문법
DROP CLUSTER cluster_name INCLUDING TABLE CASCADE CONSTRAINTS;
- INCLUDING TABLE : 클러스터로 그룹화된 테이블이 아직 남아 있는 상태에서 이 옵션없이 클러스터를 삭제하면 에러가 발생한다.
- CASCADE CONSTRAINTS : 클러스터로 그룹화된 테이블에 Referential Integrity 제약 조건이 지정되어 있을 때 이 옵션없이 클러스터 삭제 시 에러 발생
• 클러스터를 삭제하면 클러스터내의 모든 테이블과 클러스터 인덱스가 같이 삭제된다.
• 클러스터 삭제 시, 그 클러스터에 사용되었던 모든 Extents는 그 소속 테이블스페이스에 return 된다.
'DB > Oracle' 카테고리의 다른 글
[Oracle] Savepoint (1) | 2024.02.16 |
---|---|
[Oracle] 초기화 파라미터 파일(spfile, pfile) (0) | 2024.02.16 |
[Oracle] FROM절 JOIN 형태 (1) | 2023.12.10 |
[Oracle] OCP 19C 자격증 Dump 공부 1Z0-082(Part1) (1) | 2023.11.30 |
[Oracle] Chapter 12. 오라클 아키텍처와 동작에 관한 Q&A (0) | 2023.04.18 |