1. 반정규화 기본 개념
- 데이터 무결성을 희생하고, 데이터 중복을 허용하여 조인을 줄여 조회 성능을 향상시키는 방법
- 시스템 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터모델을 통합, 중복, 분리하여 의도적으로 정규화 원칙을 위배하는 행위
- 절차
- 반정규화 대상 조사
- 뷰, 클러스터링, 인덱스, 애플리케이션 등 다른 성능 향상 방법 검토
- 반정규화 적용
2. 테이블 병합
- 자주 조인되는 두 개의 테이블을 하나로 합치는 것
- 특징
- 데이터 조회 성능은 향상
- 중복 데이터가 생겨 처리량이 증가
- not null, default,check 등 제약 조건 설계가 어려움
- 종류
- 1:1 관계 테이블 병합 : 병합했을 때 이행적 종속이 발생하더라도 자주 변경되는 정보가 아니고 조회시 조인이 자주되는 경우가 많은 경우 병합
- 1:N 관계 테이블 병합 : 많은 양의 데이터 중복 발생
- 슈퍼타입/서브타입 테이블 병합
3. 테이블 분할
- 특징
- 기본키의 유일성 관리가 어려워짐
- 데이터 양이 적거나 사용 빈도가 낮은 경우는 권장하지 않음
- 분할된 테이블을 조인하느라 수행 속도가 느려짐
- 데이터 검색에 중점을 두어 분할 여부를 결정해야 함
- 종류
- 수직 분할 : 하나의 테이블에 속성이 너무 많은 경우, 칼럼을 기준으로 테이블 분할
- 갱신 위주의 속성 분할 : 데이터 갱신시 해당 행(로우)에 lock이 걸려서 다른 작업을 할 수 없으므로, 자주 갱신이 일어나는 속성들을 수직 분할
- 자주 조회되는 속성 분할 : 자주 조회되는 속성이 극히 일부일 경우
- 크기가 큰 속성 분할 : 이미지나, 2GB이상 저장될 수 있는 텍스트 형식으로 된 속성
- 보안을 적용해야 하는 속성 분할
- 수평 분할 : 행(튜플,레코드)를 기준으로 분할, 행별 사용 빈도 차이가 큰 경우 빈도에 따라 테이블 분할
- 수직 분할 : 하나의 테이블에 속성이 너무 많은 경우, 칼럼을 기준으로 테이블 분할
4. 중복 테이블 추가
- 여러 테이블에서 테이터를 추출해서 사용해야 하거나 다른 서버에 저장된 테이블을 이용해야 하는 경우 중복 테이블 추가 → 조호 성능 높임
- 중복 테이블을 추가하는 경우
- 정규화로 인해 수행 속도가 느린 경우
- 많은 범위의 데이터를 자주 처리해야 하는 경우
- 특정 범위의 데이터만 자주 처리해야 하는 경우
- 처리 범위를 줄이지 않고는 수행속도를 개선할 수 없는 경우
- 종류
- 중복 테이블 : 업무나 서버가 다를 때 중복 테이블 생성 (원격 조인 제거)
- 통계 테이블 : 집계 데이터를 위한 테이블을 생성하고 각 원본 테이블에 트리거를 설정해서 사용, 트리거 오버헤드를 유의해야 함
- 이력 테이블 : 적절한 데이터 양의 유지와 활용도를 높이기 위해 기본키를 적절히 설정해야 함
- 부분 테이블 : 자주 사용하는 칼럼으로 구성된 테이블 생성
5. 칼럼 반정규화 / 중복 속성 추가
- 조인해서 데이터 처리할 때 데이터 조회 경로를 단축하기 위해 자주 사용되는 속성을 하나 더 추가하는 것
- 특징
- 데이터 무결성을 저해
- 디스크 공간이 추가로 필요
- SQL 그룹 함수를 이용해서 처리할 수 있어야 함
- 중복 속성을 추가하는 경우
- 조인이 자주 발생하는 경우
- 접근 경로가 복잡한 경우
- 액세스의 조건으로 자주 사용되는 속성
- 기본키가 복합키인 경우
- 종류
- 중복 칼럼 추가
- 파생 칼럼 추가 : 필요한 값을 미리 계산한 칼럼 추가
- 이력 테이블 칼럼 추가
- 기본키에 의한 칼롬 추가 : PK의 종속자를 일반 속성으로 생성
- 응용 시스템의 오작동을 위한 칼럼 추가
6. 관계 반정규화
- 데이터 무결성 보장 가능
- 종류
- 중복 관계 추가 : 이미 어떤 테이블에서 다른 테이블의 정보를 읽을 수 있는 관계가 있음에도 관계를 중복하여 조회 경로를 단축
'컴퓨터 공학 > 데이터베이스' 카테고리의 다른 글
SQLD) 내가 보려고 정리한 사소한 포인트 정리 (0) | 2022.03.09 |
---|---|
SQLD) 데이터베이스 구조와 성능 (0) | 2022.01.07 |
정규화 Normalization (0) | 2022.01.07 |
ERD (Entity Relationship Diagram) 기초 (0) | 2022.01.07 |
데이터 모델링의 이해 (0) | 2022.01.07 |