SQL study [21.08.15]
반 정규화
* 간단한 정의 : 성능 향상을 위해 정규화를 포기하는 것 이다.
* 성격 : 데이터의 무결성이 보장되는 것은 아니므로 제한적으로 사용을 해야한다.
테이블 반 정규화
테이블 병합
- 비즈니스 로직 상 join 되는 경우가 많아서 통합하는 것이 성능 측면에서 유리할 경우 고려된다.
- 종류
a) 1:1 관계 테이블 병합
b) 1:N 관계 테이블 병합
c) 슈퍼 서브 타입 테이블 병합
테이블 분할
- 종류
a) 수직 분할 : Column 단위로 테이블을 1:1 분리
b) 수평 분할 : Row 단위로 테이블을 분리
테이블 추가
- 종류
a) 중복테이블 추가 : 타 업무 또는 타 서버에 있는 테이블과 동일한 구조의 테이블을 추가. 원격 join 방지
b) 통계테이블 추가 : 통계값을 미리 계산해서 저장하는 테이블 추가
c) 이력테이블 추가 : 마스터 테이블에 존재하는 row를 트랜잭션 발생 시점에 따라 복사해두는 테이블 추가
d) 부분테이블 추가 : 자주 조회되는 컬럼들만 별도로 모아놓은 테이블 추가
컬럼 반 정규화
중복컬럼 추가
- join 프로세스를 줄이기 위해 중복 컬럼을 추가
- SELECT 비용은 감소, UPDATE 비용은 증가
파생컬럼 추가
- 계산을 통해 얻어지는 결과 값을 테이블에 컬럼으로 저장
이력테이블 컬럼 추가
- 이력 테이블에 기능성 컬럼 추가 (최신 여부, 시작일 / 종료일 등)
관계 반 정규화
중복관계 추가
- 데이터 처리를 위해 여러 경로를 거쳐야 할 경우 관계를 중복시킴으로써 성능을 개선
파티셔닝 (Partitioning)
- 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 데이터 엑세스 성능 향상 및 데이터 관리방법 개선을 하는 기법 - 하나의 테이블에 많은 양의 데이터가 저장이 되면 인덱스를 추가하고, 테이블을 몇개로 쪼개도 성능이 저하가 되는 경우 용이.
반정규화 대상에 대한 다른 방법으로 처리
- 지나치게 많은 join으로 데이터를 조회하는 작업이 어려울 땐? ---> VIEW를 사용 - 대량의 데이터 처리 / 부분처리에 의해 저하되는 성능? ---> 클러스트링 적용 / 인덱스 조정 - 대량의 데이터는 Primary Key의 성격에 따라 부분적인 테이블로 분리할 수 있다. 즉, Partitioning 기법이 적용되어 성능저하 방지 가능.
오늘의 한 마디 : SQL은 하면 할 수록 재밌는 거 같다.
'Data Base > Daily_study' 카테고리의 다른 글
SQL study [21.08.17] (0) | 2021.08.18 |
---|---|
SQL study [21.08.16] (0) | 2021.08.17 |
SQL study [21.08.14] (0) | 2021.08.15 |
SQL study [21.08.13] (0) | 2021.08.14 |
SQL study [21.08.12] (0) | 2021.08.13 |
댓글