3. 반정규화 (De-Normalization)
1) 반정규화
- 데이터베이스의 성능 향상을 위하여 데이터의 중복을 허용하고 조인을 줄이는 성능향상 방법
- 조회속도를 향상시키나 데이터 모델의 유연성은 낮아짐
- 무결성을 지킬 수 있는 방법으로 시행!
2) 반정규화 수행하는 경우
- 정규화에 충실하면 종속성 활용성은 향상되나, 수행 속도가 느려지는 경우
- 다량의 범위를 자주 처리하는 경우
- 특정 범위 데이터만 자주 처리하는 경우
- 요약/집계 정보가 자주 요구되는 경우
* 반정규화 절차
대상 조사 및 검토 |
- 데이터 처리 범위, 통계성 등을 확인해 조사 |
다른 방법 검토 |
- 반정규화 수행 전 다른 방법 있는지 검토 - 클러스터링, 뷰, 인덱스 튜닝, 응용 프로그램, 파티션 등을 검토 |
반정규화 수행 |
- 테이블, 속성, 관계 |
* 클러스터링 : 클러스터링 인덱스.. 인덱스 정보를 저장할 떄 물리적으로 정렬해서 저장하는 방법
조회 시 인접 블록을 연속적으로 읽기 떄문에 성능이 향상됨
3) 반정규화 기법
(1) 테이블 반정규화
테이블 병합 |
1:1관계 테이블 병합 |
|
1:N관계 테이블 병합 |
|
|
수퍼/서브타입 테이블 병합 |
- 슈퍼 타입과 서브 타입 관계가 발생하면 테이블을 통합 (부모 자식 간의 관계) |
|
테이블 분할 |
수직 분할 |
- 칼럼을 분할하여 새로운 테이블을 만듬 (기본키를 가져감) |
수평 분할 |
- 로우 단위로 집중 발생되는 트랜잭션을 분석하여 특정 값을 기준으로 하나의 테이블을 분할 |
|
테이블 추가 |
중복 테이블 추가 |
- 다른 업무 이거나 서버가 다른 경우 동일한 테이블 구조를 중복, 원격 조인 제거 |
통계 테이블 추가 |
- SUM, AVG 등 미리 수행해 계산해 둠으로 조회 시 성능 향상 |
|
이력 테이블 추가 |
- 마스터 테이블이 존재하는 레코드를 중복 |
|
부분 테이블 추가 |
- 자주 이용하는 집중화된 칼럼을 모아놓은 별도의 테이블 생성 |
* 슈퍼타입 및 서브타입 변환 방법
OneToOne Type | - 슈퍼 타입과 서브 타입을 개별 테이블로 도출 (개별테이블 유지) - 확장성 우수하나 조인 성능이 나쁨 - 테이블 수가 많아 조인이 많이 발생, 관리 어려움, IO 성능이 좋음 - 개별 테이블로 접근이 많은 경우 선택 |
Plus Type | - 슈퍼 타입 + 서브 타입 테이블로 도출 - 확장성은 보통이고 조인성능이 나쁨 - 조인이 발생하고 관리 어려움, IO 성능이 좋음 - 슈퍼+서브 형식으로 데이터를 처리하는 경우 선택 |
Single Type | - 슈퍼 타입과 서브 타입을 하나의 테이블로 도출 - 확장성은 나쁘나 조인성능이 우수함 - 조인 성능이 좋고 관리가 편함, IO 성능이 나쁨 - 전체를 일괄적으로 처리하는 경우 선택 |
* 파티션 기법 : 논리적으로는 하나의 테이블이지만 여러 개의 데이터 파일에 분산되어 저장하는 기법
Range Partition : 데이터값의 범위를 기준으로 파티션 수행
List Partition : 특정 값을르 지정하여 파티션 수행
Hash Partition : 해시함수 적용하여 파티션 수행
Composite Partition : 범위와 해시를 복합적으로 사용하여 파티션 수행
- 파티션 테이블의 장점 : 조회 시 엑세스 범위가 줄어듬
데이터 분할되어 있으므로 IO성능 향상
각 파티션 독립적 백업, 복구 가능
(2) 칼럼 반정규화
중복칼럼 추가 | - 조인 처리시 성능저하 방지 - 조인을 감소시키기 위해 중복된 칼럼을 위치시킴 |
파생칼럼 추가 | - 트랜잭션 처리시 성능저하 방지 - 미리 값을 계산하여 칼럼에 보관 |
이력테이블 칼럼 추가 | - 대량의 이력데이터 처리시 발생할 성능저하 방지 - 이력테이블에 기능성 칼럼(최근값 여부, 시작과 종료일자 등) 추가 |
PK에 의한 칼럼 추가 | - 복합 의미 갖는 PK를 단일속성으로 구성하였을 때 발생하는 성능저하 방지 - 이미 PK안에 데이터가 존재하나 성능향상을 위해 일반 속성으로 포함하는 방법 |
응용시스템 오작동을 위한 칼럼 추가 | - 데이터 처리중 잘못하여 원래 값으로 복구하기 원할 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법 |
(3) 관계 반정규화
중복관계 추가 |
- 추가적인 관계를 맺어 조인시 성능저하 |
'[자격증] SQLD (SQL Developer)' 카테고리의 다른 글
[SQLD][책없이 공부]2과목 01. SQL 기본_01 관계형 데이터 베이스, SQL 종류 (0) | 2019.11.14 |
---|---|
[SQLD][책없이 공부]1과목 02. 데이터 모델과 성능_03 분산 데이터베이스 (0) | 2019.11.13 |
[SQLD][책없이 공부]1과목 02. 데이터 모델과 성능_01 성능데이터모델링, 정규화 (0) | 2019.11.13 |
[SQLD][책없이 공부]1과목 01. 데이터 모델링 (Data Modeling)_03 (0) | 2019.11.12 |
[SQLD][책없이 공부]1과목 01. 데이터 모델링 (Data Modeling)_02 (0) | 2019.11.12 |