상세 컨텐츠

본문 제목

[개미의 걸음 SQLD 1과목] 성능 데이터 모델링 ③ 반정규화(De-Normalization)

자격증/SQLD

by IT개미 데이터 2020. 12. 12. 07:07

본문

728x90

반정규화[De-Normalization]

데이터 중복을 허용하고 조인을 줄여 데이터베이스 성능향상 방법

  • 과도한 디스크 입출력량, 조인 등으로 인해 성능 저하가 예상될 때 주로 사용
  • 반정규화 시, 조회[SELECT] 속도는 향상되지만 데이터 모델의 유연성이 낮아짐
       
    → 입력은 반정규화에 의해 데이터가 중복되도록 입력됨
  • 중첩된 루프[Nested Loop]에 의한 조인에 의해 유발되는 성능 저하 문제점을 해결하는데 사용
        → 반정규화를 통해 하나의 테이블에 저장함으로써 조인을 제거
  • 다량의 데이터 탐색의 경우, 인덱스보다는 파티션, 클러스터링 등의 물리 저장기법을 활용하여 성능 개선
        → 하나의 결과셋을 추출에서 다량의 데이터 탐색이 반복적으로 빈번하게 발생할 때는 반정규화 고려
  • 반정규화 테이블은 집계테이블, 키연결 테이블 등 다양한 유형에서 적용 가능

 

반정규화를 수행하는 경우

  • 정규화에 충실하여 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우
  • 다량의 범위를 자주 처리해야 하는 경우
  • 특정 범위의 데이터만 자주 처리하는 경우
  • 요약/집계 정보가 자주 요구되는 경우

 

반정규화 절차

대상 조사 및 검토 데이터 처리범위, 테이블 조인 수, 통계성 등을 확인해서 반정규화 대상을 조사
다른 방법 검토 반정규화를 수행하기 전에 다른 방법이 있는지 검토
    ex> 클러스터링, 뷰, 인덱스 튜닝, 응용 프로그램, 파티션 등을 검토
반정규화 수행 테이블, 속성, 관계 등을 반정규화 

# 클러스터링

더보기

클러스터링 인덱스라는 것은 인덱스 정보를 저장할 때 물리적으로 정렬해서 저장하는 방법

  • 조회 시에 인접 블록을 연속적으로 읽기 때문에 성능이 향상됨

# 인덱스

더보기

자주 검색되는 컬럼[where 조건식에 자주 언급되는 필드]에 부여하는 것[책갈피와 같은 역할]

  • 뷰(View)와 달리 데이터 저장 공간이 따로 필요함
  • Equal조건과 between조건이 함께 있는 경우, 인덱스는 값의 범위에 따라 일정하게 정렬되야 하므로 Equal조건으로 조회되는 칼럼이 가장 앞에 나오고 범위조회하는 유형의 칼럼이 그 다음에 오도록 하면 인덱스 이용 효율을 높일 수 있음
728x90

반정규화 기법

칼럼의 반정규화 기법 테이블의 반정규화 기법
중복 칼럼 추가
파생 칼럼 추가
이력 테이블 칼럼 추가
PK에 의한 칼럼 추가
응용시스템 오작동을 위한 칼럼 추가
테이블 추가 중복테이블 추가
통계테이블 추가
이력테이블 추가
부분테이블 추가
테이블 분할 테이블 수직분할
테이블 수평분할
테이블 병합 1:1관계 테이블 병합
1:M관계 테이블 병합
슈퍼/서브타입 테이블 병합

※ FK에 대한 속성 추가는 데이터 모델링에서 관계를 연결할 때 나타나는 자연스러운 현상[반정규화 기법 X]

 

주요 반정규화 기법

중복 칼럼 추가 조인 감소를 위해 여러 테이블에 동일한 칼럼을 추가
파생 칼럼 추가
[계산된 칼럼 추가]
조회 성능을 우수하게 하기 위해 미리 계산된 칼럼을 추가
    배치 프로그램으로 미리 계산한 결과를 특정 칼럼에 추가
이력테이블 칼럼 추가 최신값을 처리하는 이력의 특성을 고려해 기능성 칼럼 추가
부분테이블 추가 하나의 테이블의 전체 칼럼 중 자주 사용하는 집중화된 칼럼들을 별도의 테이블에 추가
    → 디스크 I/O를 줄일 수 있음
테이블 수직 분할 하나의 테이블을 두 개 이상의 테이블로 분할
칼럼을 분할해 새로운 테이블을 만듦
테이블 수평 분할 하나의 테이블에 있는 값을 기준으로 테이블을 분할
동일한 칼럼에 다른 값을 가진 새로운 테이블을 만듦[특정 값의 범위에 따라 분할]
테이블 병합 1대1 관계의 테이블을 하나의 테이블로 병합해서 성능을 향상시킴
1대N 관계의 테이블을 병합하여 성능을 향상시킴
    → 많은 양의 데이터 중복이 발생
슈퍼 타입과 서브타입 관계가 발생하면 테이블을 통합해 성능을 향상시킴

# Super type과 Sub type

더보기

Super type와 Sub type 간의 관계는 베타적 관계와 포괄적 관계가 있음

   ex> 고객 엔터티가 개인고객과 법인 고객으로 분류되는 경우

    Super type : 고객 엔터티

    Sub type : 개인고객, 법인고객

    베타적 관계 : 고객이 개인 고객이거나 법인고객인 경우

    포괄적 관계 : 고객이 개인 고객일 수도 있고 법인 고객일 수도 있는 경우

# Super type 및 Sub type 변환 방법

더보기
출처 : DBGUIDE.NET
OneToOne Type Super Type과 Sub Type을 개별 테이블로 도출
테이블 수가 많아서 조인이 많이 발생하고 관리가 어려움
Plus Type Super Type과 Sub Type 테이블로 도출
조인이 발생하고 관리가 어려움
Single Type Super Type과 Sub Type을 하나의 테이블로 도출
조인 성능이 좋고 관리가 편리하지만 입출력 성능이 나쁨

 

  

728x90

관련글 더보기

댓글 영역