데이터 중복을 허용하고 조인을 줄여 데이터베이스 성능향상 방법
대상 조사 및 검토 | 데이터 처리범위, 테이블 조인 수, 통계성 등을 확인해서 반정규화 대상을 조사 |
다른 방법 검토 | 반정규화를 수행하기 전에 다른 방법이 있는지 검토 ex> 클러스터링, 뷰, 인덱스 튜닝, 응용 프로그램, 파티션 등을 검토 |
반정규화 수행 | 테이블, 속성, 관계 등을 반정규화 |
# 클러스터링
클러스터링 인덱스라는 것은 인덱스 정보를 저장할 때 물리적으로 정렬해서 저장하는 방법
# 인덱스
자주 검색되는 컬럼[where 조건식에 자주 언급되는 필드]에 부여하는 것[책갈피와 같은 역할]
칼럼의 반정규화 기법 | 테이블의 반정규화 기법 | ||
중복 칼럼 추가 파생 칼럼 추가 이력 테이블 칼럼 추가 PK에 의한 칼럼 추가 응용시스템 오작동을 위한 칼럼 추가 |
테이블 추가 | 중복테이블 추가 통계테이블 추가 이력테이블 추가 부분테이블 추가 |
|
테이블 분할 | 테이블 수직분할 테이블 수평분할 |
||
테이블 병합 | 1:1관계 테이블 병합 1:M관계 테이블 병합 슈퍼/서브타입 테이블 병합 |
※ FK에 대한 속성 추가는 데이터 모델링에서 관계를 연결할 때 나타나는 자연스러운 현상[반정규화 기법 X]
중복 칼럼 추가 | 조인 감소를 위해 여러 테이블에 동일한 칼럼을 추가 |
파생 칼럼 추가 [계산된 칼럼 추가] |
조회 성능을 우수하게 하기 위해 미리 계산된 칼럼을 추가 → 배치 프로그램으로 미리 계산한 결과를 특정 칼럼에 추가 |
이력테이블 칼럼 추가 | 최신값을 처리하는 이력의 특성을 고려해 기능성 칼럼 추가 |
부분테이블 추가 | 하나의 테이블의 전체 칼럼 중 자주 사용하는 집중화된 칼럼들을 별도의 테이블에 추가 → 디스크 I/O를 줄일 수 있음 |
테이블 수직 분할 | 하나의 테이블을 두 개 이상의 테이블로 분할 칼럼을 분할해 새로운 테이블을 만듦 |
테이블 수평 분할 | 하나의 테이블에 있는 값을 기준으로 테이블을 분할 동일한 칼럼에 다른 값을 가진 새로운 테이블을 만듦[특정 값의 범위에 따라 분할] |
테이블 병합 | 1대1 관계의 테이블을 하나의 테이블로 병합해서 성능을 향상시킴 1대N 관계의 테이블을 병합하여 성능을 향상시킴 → 많은 양의 데이터 중복이 발생 슈퍼 타입과 서브타입 관계가 발생하면 테이블을 통합해 성능을 향상시킴 |
# Super type과 Sub type
Super type와 Sub type 간의 관계는 베타적 관계와 포괄적 관계가 있음
ex> 고객 엔터티가 개인고객과 법인 고객으로 분류되는 경우
Super type : 고객 엔터티
Sub type : 개인고객, 법인고객
베타적 관계 : 고객이 개인 고객이거나 법인고객인 경우
포괄적 관계 : 고객이 개인 고객일 수도 있고 법인 고객일 수도 있는 경우
# Super type 및 Sub type 변환 방법
OneToOne Type | Super Type과 Sub Type을 개별 테이블로 도출 테이블 수가 많아서 조인이 많이 발생하고 관리가 어려움 |
Plus Type | Super Type과 Sub Type 테이블로 도출 조인이 발생하고 관리가 어려움 |
Single Type | Super Type과 Sub Type을 하나의 테이블로 도출 조인 성능이 좋고 관리가 편리하지만 입출력 성능이 나쁨 |
[개미의 걸음 SQLD 1과목] 분산 데이터베이스 (0) | 2020.12.14 |
---|---|
[개미의 걸음 SQLD 1과목] 성능 데이터 모델링 ④ PK/FK 칼럼순서&슈퍼타입/서브타입 모델 (0) | 2020.12.13 |
[개미의 걸음 SQLD 1과목] 성능 데이터 모델링 ② 용량산정 & 대용량 데이터 문제 (0) | 2020.12.11 |
[개미의 걸음 SQLD 1과목] 성능 데이터 모델링 ① 정규화(Normalization) (0) | 2020.12.10 |
[개미의 걸음 SQLD 1과목] 성능 데이터 모델링의 이해 (0) | 2020.12.09 |
댓글 영역