[SQLD] 반정규화 (De-Normalization)

yjkim97·2023년 8월 7일

자격증

목록 보기
9/24
post-thumbnail

반정규화 (De-Normalization)

데이터의 조회 성능을 향상시키기 위해 중복을 허용하거나 그룹핑하는 과정이다.

여기서 주의할 점은 조회 성능은 향상될 수 있으나 입력/수정/삭제 성능은 저하될 수 있다.
반정규화는 정규화가 끝난 후 거치게 되며 정규화와 마찬가지로 일정한 룰이 존재한다.

⭐️ 반정규화 수행하는 경우

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

반정규화 적용하는 이유
1. 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하
2. 조회 경로가 너무 멀어 조인으로 인한 성능 저하
3. 컬럼을 계산하여 읽을 때 성능이 저하
위 상황이 예상되는 경우 반정규화를 수행하게 된다.


⭐️ 반정규화의 종류

종류분류반정규화 기법설명
테이블 반정규화테이블 병합1:1 관계 테이블병합
1:M 관계 테이블병합이경우 1쪽의 속성 개수가 많으면 많을 수록
병합시 중복 데이터가 많아지므로 테이블 병합에 적절하지 못하다.
슈퍼/서브타입 테이블 병합트랜잭션은 항상 전체를 통합하여 분석 처리하는데
하나로 통합되어 있으면 테이블에 집적된 데이터만 읽어 처리할 수 있어 다른 형식에 비해 성능 우수
테이블 분할수직분할일부 컬럼을 별도의 테이블로 분할 (분할한 후 1:1 관계가 성립됨)
수평분할⭐️ 파티셔닝 기법
테이블 추가중복테이블 추가
통계테이블 추가
이력테이블 추가
부분테이블 추가디스크 I/O를 줄이기위해 자주 조회되는 컬럼들을 별도로 모아 놓는 기법
================
컬럼 반정규화중복컬럼 추가조인 감소를 위해 여러 테이블에 동일한 컬럼을 추가
파생컬럼 추가조회 성능향상을 위해 미리 계산된 컬럼을 추가
이력테이블 컬럼 추가최신값을 처리하는 이력의 특성을 고려하여 기능성 컬럼을 추가
PK에 의한 컬럼 추가
응용시스템 오작동을 위한 컬럼 추가

반정규화 절차

  1. 반정규화 대상조사

    • 범위처리빈도수 조사
    • 대량의 범위 처리 조사
    • 통계성 프로세스 조사
    • 테이블 조인 개수
  2. 다른 방법유도 검토

    • 뷰 테이블 (지나치게 많은 조인시 VIEW 사용)
    • 클러스터링 적용 (대량 데이터 or 부분처리에 의해 성능 저하시 클러스터링 또는 인덱스 조정)
    • 인덱스의 조정 (PK 순서 결정 기준에 따라 조정한다 + FK여부 상관 없이 인덱스 생서어해주는 것이 좋다)
    • 응용애플리케이션에서 로직을 구사
  3. 반정규화 적용

    • 테이블 반정규화
    • 속성의 반정규화 (컬럼 반정규화)
    • 관계의 반정규화

⭐️ 테이블 수직 분할 (1:1 관계 테이블 분리) & 로우 체이닝
1. 한 테이블에 많은 컬럼이 존재할 경우 ▶️ 로우 체이닝 발생 가능성 높음
2. 로우 체이닝이 발생한 경우 ▶️ 디스크 I/O 증가로 인해 조회 성능이 떨어짐

  • 접근 빈도에 따라 컬럼 위치를 조정 & NULL 상태인 컬럼 뒤쪽으로 위치 변경 ▶️ Row 길이를 어느정도 감소시킬 수 있으나, NULL상태이던 컬럼이 나중에 채워지게 되는 경우 더 많은 로우 체이닝이 발생하게 됨 (그리 바람직하지 못한 해결법)
  • ✅ 접근 빈도가 높은 것과 낮은 것을 구분하여 1:1로 테이블을 분리 ▶️ 디스크 I/O가 줄어들어 성능 향상

⭐️ 테이블 수평 분할 (파티셔닝 기법)
논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하는 기법

  • 데이터 액세스 성능 향상
  • 데이터 관리방법도 개선 가능

⭐️ PK 순서 결정 기준
인덱스는 값의 범위에 따라 일정하게 정렬되어 있다.
1. EQUAL = 조건으로 조회되는 컬럼이 가장 앞에
2. BETWEEN 범위조회 조건으로 조회되는 컬럼이 그 다음 위치
위 순서로 위치하는 것이 인덱스 액세스범위를 좁할 수 있는 가장 좋은 방법이다.

인덱스 정렬구조 알아보자.


Reference

  • 📖 유선배-SQL 개발자_SQLD 과외노트
profile
어제는 🐸두꺼비 오늘은 😄YJ

0개의 댓글