728x90
반응형
SMALL
반정규화(De-Normalization)
데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정ㅇ
주의할 점
- 입력, 수정, 삭제 성능이 저하
- 데이터 정합성 이슈가 발생
반정규화 과정
정규화가 끝난 후 일정한 룰에 따라 진행
테이블 반정규화
1. 테이블 병합
JOIN이 필요한 경우가 많아 테이블을 통합하는 것이 유리할 경우
1:1 관계
- 비교적 판단하기 수월
- 부작용이 적음
1:M 관계
- 1쪽에 해당하는 엔티티의 속성 개수가 많으면 중복 데이터가 많아지므로 적절하지 않음
슈퍼 서브 타입
2. 테이블 분할
수직 분할 (속성 분할)
- 엔티티의 일부 속성을 별도의 엔티티로 분할
- 1:1 관계 성립
- 자주 사용하는 속성이 아니거나 대부분의 인스턴스가 해당 속성값이 NULL인 경우
수평 분할 (인스턴스 분할, 파티셔닝)
- 엔티티의 인스턴스를 특정 기준으로 별도의 엔티티로 분할
- 주로 기간 기준을 따라 데이터를 물리적으로 분리
3. 테이블 추가
중복 테이블: 데이터의 중복을 감안하더라도 성능상 반드시 필요한 경우
통계 테이블: 주문데이터를 이용하여 월매출 테이블에 통계치를 미리 계산하여 저장
이력 테이블: 상품가격 이력 테이블에서 과거 상품가격에 대한 데이터를 관리
부분 테이블: 회원 대상 메일 발송건이 다량으로 생기는 경우 메일 발숭에 필요한 정보만 생성
컬럼 반정규화
중복 컬럼 추가
- JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우
파생 컬럼 추가
- 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관
- 상품의 재고, 프로모션 적용 할인가
이력 테이블 컬럼 추가
- 대량의 이력 테이블을 조회할 때 속도 느려지는 것을 방지
- 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가
- 최신 데이터 여부
관계 반정규화
중복 관계 추가
- JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에서 유리한 경우
728x90
반응형
LIST
'IT' 카테고리의 다른 글
데이터 모델과 SQL (1) | 2022.10.03 |
---|---|
트랜잭션(Transaction) & NULL (0) | 2022.10.01 |
백준 파이썬 알고리즘 연습 - 1157 단어 공부 (0) | 2022.08.13 |
백준 파이썬 알고리즘 연습 - 2675 문자열 반복 (0) | 2022.08.12 |
백준 파이썬 알고리즘 - 10809 알파벳 찾기 (0) | 2022.08.11 |