본문 바로가기

CERTIFICATION/SQLD

[SQLD/데이터 모델과 성능]2-3. 반정규화와 성능

2. 데이터 모델과 성능

2-3. 반정규화와 성능

(1) 반정규화

  • 중복 생성
  • 정규화된 엔터티,속성,관계에 대해 성능향상, 단순화를 수행하기 위해  중복, 통합, 분해 등을 수행
  • 무결성이 깨질 수도 있지만 
    → Disk I/O를 감소시키고, 긴 조인 쿼리문으로 인한 성능 저하 해결  
    → 중복성의 원리를 활용해 데이터 조회 시 성능 향상 
  • 정규화도 일부 조회 성능을 향상시키지만 
    → 일부 여러 개의 조인이 필요할 때, 조회에 대한 처리 성능이 확실히 중요하다고 판단되면 부분적으로 반정규화 
    → 정규화의 종속 관계는 위반하지 않으면서 데이터의 중복성을 증가시켜 조회 성능을 향상시킴 

 


(2) 반정규화 적용 방법

  1. 반정규화 대상 조사 : 범위 처리 빈도수, 대량 범위처리, 통계성 프로세스, 테이블 조인 수
  2. 다른 방법 유도할 수 있는지 검토 : View테이블, Clustering, Index 조정, 응용애플리케이션
  3. 반정규화 적용 : 테이블, 애트리뷰트, 관계를 반정규화

 

 

(3) 테이블 반정규화   (⇒ 무결성 깨트릴 가능성有)

반정규화 - 중복 추가하여 select-조인 성능 높이는 것을 인지 (무결성 X) 
  • 테이블 병합
    - 1:1 관계 병합 // 1:M 관계 병합 // 슈퍼, 서브타입 병합

 

  • 테이블 분할    분할도 반정규화 → 테이블 큰 경우 처리범위 줄이기 위해 수행
    - 수직 분할 (컬럼단위 or 테이블 1:1로 분리)
    - 수평 분할 (행 단위) 

 

  • 테이블 추가

- 중복테이블 추가: 동일한 테이블 구조를 추가하여 중복 원격조인 “제거” (↔ 중복 컬럼 추가)


- 통계테이블 추가: SUM, AVG 등을 미리 계산 (조회 성능 향상)


- 이력테이블 추가: 마스터 테이블 레코드(= 이력) 중복하여 이력테이블에 존재

                               마스터 테이블에 존재하는 row를 트랜잭션 발생 시점에 따라 복사해두는 테이블 추가
- 부분테이블 추가: 전체 컬럼 중 자주 이용하는 인싸 “컬럼”만 모아 별도 테이블 형성 (↔ 부분컬럼 추가는 X)

 

 

(4) 컬럼 반정규화 (⇒ 무결성 깨트릴 가능성)

  • 중복컬럼 추가 : 조인을 감소시키기 위해 중복된 칼럼을 추가 (= 조인할 필요 줄어듦)
    - JOIN 프로세스를 줄이기 위해 중복 컬럼 추가
    - SELECT 비용은 감소하나, UPDATE 비용은 증가

 

  • 파생컬럼 추가 : SUM처럼 계산하는 것들은 미리 계산하여 칼럼에 보관 (↔ 통계테이블 추가)
    - 계산을 통해 얻어지는 결과 값을 테이블에 컬럼으로 저장

 

  • 이력테이블 칼럼 추가 : 기능성 칼럼 추가 (최신여부, 시작 및 종료일자 등)

 

  • 기본키에 의한 컬럼 추가 : 복합의 의미를 갖는 PK 단일 구성 시 발생 → 일반속성으로 PK 추가 
  • 응용시스템 오작동을 위한 컬럼 추가 : 이전 데이터를 임시적으로 중복 보관

 

 

(5) 관계 반정규화 (⇒ 무결성 깨트릴 가능성 X)

  • 중복관계를 추가 : 여러 경로를 거친 조인을 방지하기 위해 추가적인 관계를 맺음