I. 질의 성능 향상을 위한 데이터 중복 허용, 반정규화의 개요
가. 반정규화(Denormalization)의 정의
- 정규화된 엔티티, 속성, 관계에 대해 시스템 성능향상과 개발, 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법
나. 반정규화의 필요성
- 정규화 시 빈번한 조인 필요하여 검색 시간 과다 소요 시
- 대용량 데이터베이스에서 파티션의 기준으로 사용되는 파티션 키가 정규화로 제거될 소지 존재
II. 반정규화의 유형 및 절차
가. 반정규화의 유형
유형 |
설명 |
Table Merge |
- 부모 테이블에 자식 테이블의 속성을 삽입하고 자식 테이블 삭제 |
Redundant Column 추가 |
- 조인하여 읽어올 속성을 양쪽 테이블에 중복적으로 저장 |
Computed Column 추가 |
- 여러 숫자 필드를 조인하여 계산이 필요한 경우에 가장 조회가 많은 속성을 지난 테이블에 계산 결과 속성 추가 |
Code Table Merge |
- 코드명을 속성으로 추가하여 조인 제거 |
Table 수직분할 |
- 매우 많은 수의 컬럼으로 구성된 테이블에서 빈번하게 Access되는 컬럼과 Access 횟수가 적은 컬럼을 분리하여 구성 |
Table 수평분할 |
- 동일한 속성을 가진 테이블을 기준에 따라 2개로 분리 |
나. 반정규화의 절차
절차 |
방법 |
설명 |
1) 반정규화 대상조사 |
범위처리 빈도수 조사 |
- 자주 사용되는 테이블에 접근하는 프로세스 수가 많고, 항상 일정한 범위만을 조회하는 경우 |
대량 범위처리 조사 |
- 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우 처리 범위를 일정하게 줄이지 않으면 성능 보장이 불가능한 경우 |
|
통계 성 프로세스 조사 |
- 통계 성 프로세스에 의해 통계 정보를 필요로 할 때 별도의 통계테이블(반정규화 테이블)을 생성 |
|
테이블 조인 개수 조사 |
- 테이블에 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 반정규화를 검토 |
|
2) 다른 방법 유도검토 |
뷰 테이블 |
- 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰(VIEW)를 사용 |
클러스터링 적용 |
- 대량의 데이터를 특정 클러스터링 팩트에 의해 저장방식을 다르게 하는 방법(조회중심의 테이블에만 적용가능) |
|
인덱스 적용 |
- 인덱스를 통해 성능을 충분히 확보할 수 있다면 인덱스를 조정하여 반정규화를 회피 |
|
응용 어플리케이션 |
- 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상 |
|
3) 반정규화 적용 |
테이블/속성/관계 반정규화 |
III. 반정규화의 방법
구분 |
방법 |
설명 |
테이블 반정규화 |
테이블 병합 |
- 조인되는 경우가 많아서 테이블을 합치는 것이 성능향상에 효율적일 경우에 적용 - 1:M 관계는 데이터 중복 발생, 신중히 접근 |
테이블 분할 |
- 분할된 테이블의 전체 조회 시 union을 사용해야 하므로 성능이 느려짐 |
|
테이블 추가 |
논리적인 모델링이 끝난 후 추가적으로 통계 산출 발생 시 통계 테이블을 추가하여 테이블을 산출 |
|
컬럼 반정규화 |
중복 컬럼 추가 |
- 다른 테이블에 존재하는 속성 자주 이용 경우 - 확인하려는 정보가 너무 많은 조인으로 불필요한 낭비 발생 경우 |
파생 컬럼 추가 |
- 연산을 통해서 결과값을 자주 접근하게 될 경우 컬럼을 추가해 연산을 단순화 |
|
이력 테이블 컬럼 추가 |
- 시점 이력 테이블에 최신의 여부를 확인하기 위해 최신 날짜를 추가하는 경우 |
|
PK에 의한 컬럼 추가 |
- 여러 컬럼으로 이루어진 PK를 가진 테이블을 조인할 경우 단순성을 위해서 인공키를 PK로 지정하고 활용 |
|
- 읽기 성능을 향상시키고 SQL 문장을 더 간단히 작성 가능 - 무결성 확보 어렵고 추가 저장공간 필요, 중복 속성 인해 원본 확인 어려움 |
||
관계 반정규화 |
- 조회 관계를 단순화시키기 위해 관계를 중복 |
'IT기술노트 > 데이터베이스' 카테고리의 다른 글
Statement와 Prepared Statement (0) | 2021.03.07 |
---|---|
동적SQL (0) | 2021.03.07 |
Stored Procedure (0) | 2021.03.07 |
SQL(Structured Query Language) (0) | 2021.03.07 |
정규화(Normalization) (0) | 2021.03.07 |
암스트롱 공리 (0) | 2021.03.07 |
이상현상(Anomaly) (0) | 2021.03.07 |
함수적 종속성(Functional Dependency) (0) | 2021.03.07 |
댓글