[SQLD] 1-4. 반정규화 기법
2021. 10. 26. 18:05ㆍCertificate`/SQLD
테이블 반정규화 (병합 / 분할 / 추가)
1. 테이블 병합
- 관계 병합 (1:1 / 1:M)
- 두 테이블의 동시 조회가 많을 때
- 슈퍼/서브타입 관계 병합
- 여러 앤터티 공통 속성 = Super Type / 개별 속성 = Sub Type
2. 테이블 분할
- 수직(컬럼) 분할 (↓)
- 컬럼 단위 테이블을 디스크 I/O를 분산 처리하기 위해 테이블을 1:1로 분리
- 트랜잭션 처리 유형 파악이 선행되어야 한다
- 수평(로우) 분할 (→)
- 로우 단위로 발생하는 트랜잭션을 분석해서 디스크 I/O, 데이터 접근 효율성을 높여서 성능 향상
3. 테이블 추가
- 중복 테이블 추가
- 다른 업무 or 서버일 경우 동일한 테이블 구조를 중복해서 원격 조인 제거
- 통계 테이블 추가
- SUM, AVG 등을 미리 계산해서 조회 시 성능 향상
- 이력 테이블 추가
- 마스터 테이블에 존재하는 레코드를 중복해서 이력 테이블에 추가
- 가장 최근 값을 중복으로 기록한 테이블 추가
- 부분 테이블 추가
- 테이블에 자주 이용하는 컬럼들을 따로 모아놓은 별도의 반정규화 테이블 생성
- 디스크 I/O 줄이기
컬럼(속성) 반정규화 (중복 / 파생 / 이력 T / PK / 시스템 오작동)
1. 중복 컬럼 추가
- 조인을 감소시키기 위해 자주 사용하는 컬럼을 중복
2. 파생 컬럼 추가
- 미리 값을 계산해서 컬럼에 보관 → 트랜잭션 처리 시점에 계산에 의해 발생하는 성능 저하 예방
3. 이력 테이블 컬럼 추가
- 이력 테이블에 기능성 컬럼 (최근 값 여부, 시작/종료일자,...) 등을 추가 → 대량의 이력 테이블을 처리할 때 성능 저하 예방
4. PK에 의한 컬럼 추가
- PK가 복합 의미를 가지면 일반 속성 추가 (PK 안에서 특정값을 조회할 때 성능 향상)
- ex) 차량번호가 '지역'+'일련번호'로 구성된 경우 '지역'이라는 일반 속성을 추가
5. 응용시스템 오작동을 위한 컬럼 추가
- 사용자 실수 or 응용프로그램 오류로 인해 원래 값으로 복구를 원할 때 데이터를 임시적으로 중복 보관
관계 반정규화
- 중복 관계 추가
- 조인 경로 단축을 목적으로