Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- js
- 싸피셜
- db
- PWA
- SSAFY
- TypeScript
- pwa적용하기
- 백준
- Python
- git
- 싸피10기
- 리액트
- SQL
- SSAFYcial
- sqld
- 알고리즘
- 플로이드워셜
- Django
- vitepwa
- Javascript
- unionfind
- 머신러닝종류
- 싸피
- queryset
- QuerySetAPI
- VITE
- 데코레이터
- react
- 14658
- 셀프넘버
Archives
- Today
- Total
Meme's IT
[SQLD]★반정규화★ 본문
# 반정규화란?
데이터를 중복, 통합, 분리하여 성능을 향상시키는 기법
데이터 무결성이 깨질 수 있는 위험을 감수하고 조회속도를 향상
하지만 데이터 모델의 유연성은 낮아짐
half정규화가 아니라 reverse정규화임
# 반정규화를 해야하는 이유?
- 디스크 I/O 양이 많아서 성능이 저하된 경우
- 경로가 너무 멀어 JOIN으로 인해 성능이 저하된 경우
- 다량의 범위를 자주 처리해야하는 경우
- 칼럼을 계산하여 읽을 때 성능이 저하되는 경우 등등..
# 반정규화의 절차
1. 반정규화 대상 조사
: 데이터 처리 범위, 통계성 등을 확인해서 대상을 조사한다
2. 다른 방법 검토
- VIEW 사용: 지나치게 많은 JOIN이 걸리는 경우
- 클러스터링 or 인덱스 조정: 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우
더보기
클러스터링이란?
- 자주 사용되는 테이블의 데이터를 디스크같은 물리적인 위치에 정렬에서 저장시키는 방법
- 데이터 조회 성능 향상
- 데이터 저장, 수정, 삭제 성능은 감소
- 파티셔닝: PK의 성격에 따라 부분적인 테이블로 분리할 수 있을 때, 파티셔닝 키에 의해 물리적 저장공간 분리
- 캐시: 응용 애플리케이션에서 로직을 구사하는 방법을 변경해서 성능을 향상
3. 반정규화 적용
테이블과 속성, 관계에 대해 중복, 추가, 분할, 제거 하는 방법을 이용해 반정규화 적용
# 반정규화 기법
1. 테이블 반정규화
(1) 테이블 병합
- 1:1 관계 테이블 병합
- 1:M 관계 테이블 병합: 많은 양의 데이터 중복이 발생한다
- 슈퍼 / 서브타입 테이블 병합
더보기
Super Type & Sub Type
- 공통인 부분 = 슈퍼 타입
- 공통으로부터 상속받아 다른 엔티티와 차이가 있는 속성 = 서브타입
- 예를 들어, 일반 고객과 법인 고객이 있을 때, 고객이 슈퍼타입, 일반과 법인이 서브타입이 된다
(2) 테이블 분할
- 수직 분할: 하나의 테이블을 두 개 이상의 테이블로 분할, Column을 분할하여 새로운 테이블 만들기
- 수평 분할: row 단위로 집중 발생되는 트랜잭션을 분석해서 데이터 접근의 효율성을 높여 성능을 향상시키기 위해 row단위로 테이블 분리
(3) 테이블 추가
- 중복테이블 추가: 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복해서 원격 조인을 제거해서 성능향상
- 통계테이블 추가: SUM, AVG 등을 미리 수행해둠
- 이력테이블 추가: 최신값을 처리하는 이력의 특성을 고려해서 칼럼 추가, 최근 값을 찾기 위한 조회 성능 저하를 예방
- 부분테이블 추가: 하나의 테이블에서 자주 이용하는 칼럼이 있을 때, 그 칼럼들만 모아놓은 별도의 테이블을 생성
2. 칼럼 반정규화
- 중복 칼럼 추가: 조인을 감소시키기 위해
- 파생 칼럼 추가: 트랜잭션을 처리할 때 계산에 의해 발생되는 성능저하를 예방하기 위해 미리 값을 계산하여 칼럼에 저장 (= Derived Column)
- 이력 테이블 칼럼 추가: 이력테이블에 기능성 칼럼을 추가( 최근값 여부, 시작과 종료일자 등등)
- PK에 의한 칼럼 추가: PK를 일반 속성으로 생성
- 응용 시스템의 오작동을 위한 칼럼 추가: 이전 데이터를 임시적으로 중복해서 보관하는 기법
3. 관계 반정규화
→ 데이터 무결성 유지
- 중복관계 추가: 데이터를 처리하기 위해 여러경로를 거쳐서 조인이 가능하지만, 이 때 발생할 수 있는 성능저하를 예방하기 위해 추가적인 관계를 맺는 방법
'공부 > SQLD' 카테고리의 다른 글
[SQLD] DB의 구조와 성능 (0) | 2023.10.23 |
---|---|
[SQLD] 대용량 데이터에 따른 성능 (0) | 2023.10.22 |
[SQLD] ★정규화★와 성능 (0) | 2023.10.18 |
[SQLD] 성능 데이터 모델링 (0) | 2023.10.18 |
[SQLD] 식별자 (0) | 2023.10.17 |