
Oracle - Clustering Factor
데이터베이스에서는 특정 컬럼을 기준으로 같은 값을 갖는 데이터가 서로 모여있는 정도를 의미한다.
인덱스 클러스터링 팩터가 좋다. 고 하면 인덱스 정렬 순서 와 테이블 정렬 순서 가 서로 비슷하다는 것을 말한다.
- Index Scan의 Cost에 큰 영향을 준다.
- Index Lookup을 통해 Data를 읽는 일량을 결정한다.
Clustering Factor 이해하기
Clustering Factor(CF)는 인덱스 통계 정보 중 하나로, 인덱스를 통해 테이블 데이터를 액세스할 때 발생하는 물리적 I/O 양을 예측하는 데 사용된다.
CF 값의 범위
- 최소값: 테이블 블록 수와 같음 (가장 좋은 경우)
- 최대값: 인덱스 레코드 수와 같음 (가장 나쁜 경우)
-- Clustering Factor 확인 |
CF가 좋은 경우 vs 나쁜 경우
좋은 CF (Low CF)
- 인덱스 정렬 순서와 테이블 정렬 순서가 일치
- 같은 블록에서 연속된 데이터를 읽을 수 있음
- 물리적 I/O 감소
- Index Range Scan 성능 향상
나쁜 CF (High CF)
- 인덱스 정렬 순서와 테이블 정렬 순서가 불일치
- 매번 다른 블록을 읽어야 함
- 물리적 I/O 증가
- Full Table Scan이 더 효율적일 수 있음
CF 개선 방법
테이블 재생성
-- 인덱스 컬럼 순서로 테이블 재생성
CREATE TABLE new_table AS
SELECT * FROM old_table
ORDER BY indexed_column;CTAS (Create Table As Select) 사용
CREATE TABLE table_name_new AS
SELECT * FROM table_name
ORDER BY column_name;IOT (Index Organized Table) 고려
- 테이블 데이터가 인덱스 구조로 저장됨
- CF 개념이 적용되지 않음
파티셔닝 활용
- 논리적으로 데이터를 분할하여 CF 영향 최소화
실제 예제
-- CF가 나쁜 경우 |
CF와 옵티마이저
옵티마이저는 CF 값을 참고하여 실행 계획을 결정한다:
- CF가 낮을 때: Index Range Scan 선호
- CF가 높을 때: Full Table Scan 선호
-- 실행 계획 확인 |
주의사항
- CF는 통계 정보 수집 시 계산됨
- 데이터 변경이 많은 테이블은 주기적인 통계 수집 필요
- DML 작업이 많을수록 CF가 나빠질 수 있음
- CF 개선을 위한 테이블 재생성은 다운타임을 고려해야 함