SQLD - 반정규화(De-Normalization)

헨도·2024년 1월 23일
0

SQLD

목록 보기
10/28
post-thumbnail

반정규화

  • 데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법이다.
  • 반정규화는 조회(SELECT) 속도를 향상하지만, 데이터 모델의 유연성은 낮아진다.

반정규화를 수행하는 경우

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

반정규화 절차

반정규화 절차설명
대상 조사 및 검토데이터 처리 범위, 통계성 등을 확인해서 반정규화 대상을 조사한다.
다른 방법 검토반정규화를 수행하기 전에 다른 방법이 있는지 검토한다.
예를 들어 클러스터링 뷰, 인덱스 튜닝, 응용 프로그램, 파티션 등을 검토한다.
반정규화 수행테이블, 속성, 관계 등을 반정규화 한다.
* 클러스터링(Clustering)
	- 클러스터링 인덱스라는 것은 인덱스 정보를 저장할 때 물리적으로 정렬해서 저장하는 방법이다.
    - 따라서 조회 시에 인접 블록을 연속적으로 읽기 때문에 성능이 향상된다.

반정규화 기법

계산된 칼럼 추가

  • 배치 프로그램으로 총판매액, 평균잔고, 계좌평가 등을 미리 계산하고, 그 결과를 특정 칼럼에 추가한다.
부서코드
부서명
총판매액

(계산된 칼럼 추가 : 총 판매액)

부서코드
분기
판매액

테이블 수직 분할

  • 하나의 테이블을 두 개 이상의 테이블로 분할한다. 즉, 칼럼을 분할하여 새로운 테이블을 만드는 것이다.

테이블 A

KeyC1C2C3C4C5C6
  1. 분할 - 테이블 A1
KeyC1C2C3
  1. 분할 - 테이블 A2
KeyC4C5C6

테이블 수평 분할

  • 하나의 테이블에 있는 값을 기준으로 테이블을 분할하는 방법이다.

테이블 A

년도C1
2001
2002
2003
2004
  1. 분할
년도C1
2001
2002
  1. 분할
년도C1
2003
2004
* 파티션(Partition) 기법
	- 데이터베이스에서 파티션을 사용하여 테이블을 분할할 수 있다.
      파티션을 사용하면 논리적으로는 하나의 테이블이지만 여러 개의 데이터 파일에 분산되어서 저장된다.
    - Range Partition : 데이터 값의 범위를 기준으로 파티션을 수행한다.
    - List Partition : 특정한 값을 지정하여 파티션을 수행한다.
    - Hash Partition : 해시 함수를 적용하여 파티션을 수행한다.
    - Composite Partition : 범위와 해시를 복합적으로 사용하여 파티션을 수행한다.
    
* 파티션 테이블의 장점
	- 데이터 조회 시에 엑세스(Access) 범위가 줄어들기 때문에 성능이 향상된다.
    - 데이터가 분할되어 있기 때문에 I/O (Input / Output)의 성능이 향상된다.
    - 각 파티션을 독립적으로 백업 및 복구가 가능하다.

테이블 병합

  • 1대1 관계의 테이블을 하나의 테이블로 병합해서 성능을 향상시킨다.
  • 1대N 관계의 테이블을 병합하여 성능을 향상시킨다.
    하지만 많은 양의 데이터 중복이 발생한다.
  • 슈퍼 타입과 서브 타입 관계가 발생하면 테이블을 통합하여 성능을 향상시킨다.
* Super Type 과 Sub Type
	- 고객 엔터티는 개인고객과 법인고객으로 분류된다.
      이때 고객 엔터티는 슈퍼 타입이고 개인고객과 법인고객은 서브 타입이 된다.
    - 즉, 부모와 자식 간의 관계가 나타난다.
    - 슈퍼 타입과 서브 타입의 관계는 배타적 관계와 포괄적 관계가 있는데, 배타적 관계는 고객이 개인고객이거나 법인고객인 경우를 의미한다.
      포괄적 관계는 고객이 개인고객일 수도 있고 법인고객일 수도 있는 것이다.
  • 슈퍼 타입 및 서브 타입 변환 방법
변환 방법설명
OneToOne Type- 슈퍼 타입과 서브 타입을 개별 테이블로 도출한다.
- 테이블의 수가 많아서 조인이 많이 발생하고 관리가 어렵다.
Plus Type- 슈퍼 타입과 서브 타입 테이블로 도출한다.
- 조인이 발생하고 관리가 어렵다.
Single Type- 슈퍼 타입과 서브 타입을 하나의 테이블로 도출한다.
- 조인 성능이 좋고 관리가 편리하지만, 입출력 성능이 나쁘다.
profile
Junior Backend Developer

0개의 댓글