본문 바로가기
[자격증] SQLD(SQL개발자)/↘ 데이터 모델링의 이해

[ SQLD ] 데이터 모델과 성능 - 2. 반정규화와 성능

by 승큐리티 2020. 5. 20.

[ SQLD ] 

2. 데이터 모델링의 이해

 2-2. 반정규화와 성능

 

1. 반정규화
정규화로 인한 DB 성능 저하를 막고자 데이터 중복을 허용하고 조인 횟수를 줄이는 방법

반정규화 특징
반정규화 시 테이블 조회가 간단하다.
조인을 조회해서 조인을 제거함으로써 성능을 향상 시킨다.
데이터 중복을 허용하기위해 조회(SELECT)문에서 조인(JOIN)을 제거한다. -> 조회의 속도 향상
데이터 독립성이 낮아진다.

반정규화 수행하는 경우
정규화 시 수행 속도가 느려졌을 경우
다량의 범위를 자주 처리해야 하는 경우
특정 범위의 데이터만 자주 처리하는 경우
요약/집계 정보가 자주 요구되는 경우

2. 반정규화 절차
1) 반정규화 대상 조사
모든 데이터양을 조사 후 범위 처리 빈도, 통계 프로세스, 테이블 조인 수, 대량 범위 처리 등을 통해 반정규화 대상을 검토한다.

2) 다른 방법 검토
다른 방법이 있는지 검토한다.
예) 뷰(VIEW), 클러스터링, 인덱스 조정, 파티셔닝 기법(Partitioning), 응용 애플리케이션에서 로직을 구사하는 방법 변경

3) 반정규화 실행
반정규화를 하는 대상은 테이블, 속성, 관계에 대해 적용하며 필요 시 추가, 분할, 제거도 할 수 있다.

3. 반정규화 기법
1) 테이블 병합 기법
1-1 ) 1:1 관계의 테이블 -> 하나의 테이블로 병합 후 성능 향상
1-2 ) 1:N 관계의 테이블 -> 테이블을 병합 후 성능 향상 but 데이터 중복이 많다
1-3 ) 슈퍼/서브 타입 관계 테이블 -> 테이블 통합하여 성능향상

슈퍼 타입 / 서브타입?
주문 엔터티가 있다면 주문 엔터티는 의류 주문이나 신발 주문으로 분류될 수 있다.
이때, 주문 엔터티는 슈퍼 타입 의류 주문이나 신발 주문은 서브타입이라고 한다.

슈퍼/서브 타입 변환 방법
1. OneToOne Type ( 1:1 타입 )
슈퍼 타입과 서브타입을 개별 테이블로 도출 -> 테이블 수가 많기 때문에 조인 증가, 관리 힘듦
2. Plus Type ( 슈퍼 + 서브 타입 )
슈퍼 타입과 서브 타입 2개의 테이블로 도출 -> 조인 발생, 관리 힘듦
3. Single Type ( All in One 타입 )
슈퍼 타입과 서브타입을 하나의 테이블로 도출 -> 조인 감소, 관리 편리, 입출력 성능 나쁨

2) 테이블 분할 기법
2-1 ) 수직분할 기법 - 1개의 테이블을 수직으로 분할시켜 2개의 테이블로 만든다.
                            칼럼단위의테이블을 1:1로 분리하여 성능향상

 

 

 

2-2 ) 수평분할 기법 - 1개의 테이블을 수평으로 분할 시켜 2개의 테이블로 만든다.
                             로우 단위로 집중 발생되는 트랜잭션을 분석하여 로우단위로 테이블을 쪼갬
                             특정 값에 따라서 테이블을 분할

 

 

 

3) 테이블 추가 기법
3-1 ) 중복 테이블 추가 - 테이블 구조 중복하여 원격 조인 제거
3-2 ) 통계 테이블 추가 - 합계, 평균을 미리 계산하여 조회 시 성능 향상
3-3 ) 이력 테이블 추가 - 마스터 테이블에 존재하는 레코드를 중복하여 이력테이블 존재
3-4 ) 부분 테이블 추가 - 자주 사용하는 칼럼들 모아 놓은 테이블 생성


댓글