-> 블로그 이전

[SQLD] 1-4. 반정규화 기법

2021. 10. 26. 18:05Certificate`/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 응용프로그램 오류로 인해 원래 값으로 복구를 원할 때 데이터를 임시적으로 중복 보관

 

 

관계 반정규화

- 중복 관계 추가

  • 조인 경로 단축을 목적으로