자격증/SQLD
[개미의 걸음 SQLD 1과목] 성능 데이터 모델링 ③ 반정규화(De-Normalization)
IT개미 데이터
2020. 12. 12. 07:07
728x90
반정규화[De-Normalization]
데이터 중복을 허용하고 조인을 줄여 데이터베이스 성능향상 방법
- 과도한 디스크 입출력량, 조인 등으로 인해 성능 저하가 예상될 때 주로 사용
- 반정규화 시, 조회[SELECT] 속도는 향상되지만 데이터 모델의 유연성이 낮아짐
→ 입력은 반정규화에 의해 데이터가 중복되도록 입력됨 - 중첩된 루프[Nested Loop]에 의한 조인에 의해 유발되는 성능 저하 문제점을 해결하는데 사용
→ 반정규화를 통해 하나의 테이블에 저장함으로써 조인을 제거 - 다량의 데이터 탐색의 경우, 인덱스보다는 파티션, 클러스터링 등의 물리 저장기법을 활용하여 성능 개선
→ 하나의 결과셋을 추출에서 다량의 데이터 탐색이 반복적으로 빈번하게 발생할 때는 반정규화 고려 - 반정규화 테이블은 집계테이블, 키연결 테이블 등 다양한 유형에서 적용 가능
반정규화를 수행하는 경우
- 정규화에 충실하여 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우
- 다량의 범위를 자주 처리해야 하는 경우
- 특정 범위의 데이터만 자주 처리하는 경우
- 요약/집계 정보가 자주 요구되는 경우
반정규화 절차
대상 조사 및 검토 | 데이터 처리범위, 테이블 조인 수, 통계성 등을 확인해서 반정규화 대상을 조사 |
다른 방법 검토 | 반정규화를 수행하기 전에 다른 방법이 있는지 검토 ex> 클러스터링, 뷰, 인덱스 튜닝, 응용 프로그램, 파티션 등을 검토 |
반정규화 수행 | 테이블, 속성, 관계 등을 반정규화 |
# 클러스터링
더보기
클러스터링 인덱스라는 것은 인덱스 정보를 저장할 때 물리적으로 정렬해서 저장하는 방법
- 조회 시에 인접 블록을 연속적으로 읽기 때문에 성능이 향상됨
# 인덱스
더보기
자주 검색되는 컬럼[where 조건식에 자주 언급되는 필드]에 부여하는 것[책갈피와 같은 역할]
- 뷰(View)와 달리 데이터 저장 공간이 따로 필요함
- Equal조건과 between조건이 함께 있는 경우, 인덱스는 값의 범위에 따라 일정하게 정렬되야 하므로 Equal조건으로 조회되는 칼럼이 가장 앞에 나오고 범위조회하는 유형의 칼럼이 그 다음에 오도록 하면 인덱스 이용 효율을 높일 수 있음
728x90
반정규화 기법
칼럼의 반정규화 기법 | 테이블의 반정규화 기법 | ||
중복 칼럼 추가 파생 칼럼 추가 이력 테이블 칼럼 추가 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 변환 방법
더보기

출처 : DBGUIDE.NET

OneToOne Type | Super Type과 Sub Type을 개별 테이블로 도출 테이블 수가 많아서 조인이 많이 발생하고 관리가 어려움 |
Plus Type | Super Type과 Sub Type 테이블로 도출 조인이 발생하고 관리가 어려움 |
Single Type | Super Type과 Sub Type을 하나의 테이블로 도출 조인 성능이 좋고 관리가 편리하지만 입출력 성능이 나쁨 |
728x90