SQLD 자격증 공부하면서 정리한 내용들을 작성한 글입니다.
3. 반정규화와 성능
(1) 반정규화(Denormalization)란?
- 정규화된 엔터티, 속성, 관계에 대해 성능 향상을 목적으로 중복, 통합, 분리를 수행하는 데이터 모델링 기법
(2) 반정규화 특징
- 테이블, 칼럼, 관계의 반정규화를 종합적으로 고려해야 함
- 과도한 반정규화는 데이터 무결성을 침해하게 된다.
- Disk I/O를 감소시키고, 긴 조인 쿼리문으로 인한 성능 저하를 해결한다.
- 중복성의 원리를 활용해 데이터 조회 시 성능이 향상됨
(3) 반정규화 절차
- 반정규화 대상 조사
- 범위 처리 빈도수 조사
- 대량의 범위 처리 조사
- 통계성 프로세스 조사
- 테이블 조인 개수
- 다른 방법 유도 검토
- 뷰(VIEW) 테이블
- 클러스터링 적용
- 인덱스의 조정
- 응용 애플리케이션
- 반정규화 적용
- 테이블 반정규화
- 속성의 반정규화
- 관계의 반정규화
(4) 반정규화 기법
-
칼럼 반정규화
- 중복칼럼 추가
- 조인을 감소시키기 위해 중복된 칼럼 추가(조인할 필요↓)
- 파생칼럼 추가
- 계산하는 것들은 미리 계산하여 칼럼에 보관(SUM,AVG 등)
- 이력테이블칼럼 추가
- PK의 의미적 분리를 위한 칼럼 추가
- PK가 복합 의미를 갖는 경우, 조회 성능 향상을 위해 일반 속성을 추가
- 데이터 복구를 위한 칼럼 추가
-
테이블 반정규화
- 테이블 병합 - 관계 병합(두 테이블의 동시 조회가 많은 경우), 슈퍼/서브타입 병합
- 테이블 분할 - 수직 분할(칼럼 단위로 분리), 수평 분할(로우 단위로 분리)
- 테이블 추가 - 중복 테이블 추가, 통계 테이블 추가, 이력 테이블 추가, 부분 테이블 추가(자주 이용하는 칼럼만 모아 별도 테이블 형성)
-
관계 반정규화
- 중복관계 추가
- 조인을 통해 정보 조회가 가능하지만, 조인 경로 단축을 위해 중복관계를 추가함