728x90
반응형
성능 데이터 모델링
- 데이터베이스의 성능 향상을 위해 분석/설계 단계부터 성능과 관련된 사항이 데이터 모델링에 반영되도록 하는 것
- 데이터의 증가가 빠를수록 성능 개선 비용이 증가함
- 설계단계부터 고려할 경우 비용 최소화가 가능함
성능 데이터 모델링 순서
- 데이터 모델링 시 정규화를 정확히 수행함
- 데이터베이스 용량을 산정함
- 데이터베이스에 발생하는 트랜잭션 유형을 파악함
- 용량과 트랜잭션의 유형에 따라 반정규화를 수행함
- 이력모델, PK/FK 조정, 슈퍼타입/서브타입 조정을 수행함
정규화 vs 반정규화
- 정규화
- 데이터를 분해하는 과정
- 데이터의 중복을 최소화하고, 유연성을 가지며, 변경을 최소화하고, 데이터가 일관될 수 있도록 하는 방법이다.
- 제 1~5정규화가 있지만, 주로 1~3 정규화까지 수행함
- 반정규화
- 정규화를 했을 때 성능이 더욱 악화될 경우, 데이터의 중복을 허용하고 조인을 줄여서 성능을 향상시키는 방법이다.
정규화
- 제 1정규화
- 기본키를 설정하는 과정
- 속성의 원자성과 엔터티의 유일성을 확보함
- 모든 속성이 식별자에 종속되어야 함
- X가 변하면 Y가 변한다 (Y는 X에 함수적으로 종속됨)
- 식별자가 변하면 속성이 변함
- 속성값의 중복 여부 체크! (단일 → 복합 순)
- 제 2정규화
- 기본키가 2개 이상으로 구성될 경우 수행함
- 모든 속성(지역명, 점주명, 메뉴명, 출시일, 가격)이 식별자에 종속해야하며, 아니면 분해해야 함
- 부분함수 종속성을 분해함
- 주식별자 중 일부로부터 독립하여 1:M의 관계로 재설계
- X → Y (X가 변하면 Y가 변한다 (Y는 X에 함수적으로 종속됨)
- 함수적 종속성 여전히 존재함 (부분함수 종속성)
- {매장코드, 메뉴코드} → {가격}
{매장코드} → {지역명, 점주명}
{메뉴코드} → {메뉴명, 출시일}
정규화 전후 스키마 비교
- 제 3정규화
- 기본키 외에 컬럼간 종속성을 제거함
- ‘이행 함수 종속성’ 제거
반정규화
- 정규화를 했을 때 성능이 더욱 악화될 경우, 데이터의 중복을 허용하고 조인을 줄여서 성능을 향상시키는 방법이다.
- 성능 데이터 모델링 순서
- 데이터 모델링 시 정규화를 정확히 수행함
- 데이터베이스 용량을 산정함
- 데이터베이스에 발생하는 트랜잭션 유형을 파악함
- 용량과 트랜잭션의 유형에 따라 반정규화를 수행함
- 이력모델, PK/FK 조정, 슈퍼타입/서브타입 조정을 수행함
- 반정규화 기법 (칼럼 & 테이블)
- 칼럼추가 - 중복칼럼 추가, 파생칼럼 추가(ex. 계산된 컬럼), 이력테이블 칼럼 추가, PK에 의한 칼럼 추가 등
- ex) 중복칼럼 추가
A테이블에 있는 a,b정보를 조회할 때 C테이블의 c 정보와 D테이블의 d정보를 늘 함께 조회한다면?
>>> 과도한 조인을 줄이기 위해 A테이블에 c,d 컬럼을 추가하여 조회 성능을 향상시킨다. - ex) 파생칼럼 추가
여러 테이블을 JOIN해서 얻을 수 있는 정보값이 자주 사용된다면?
>>> 미리 계산된 컬럼을 추가해둔다. ex) SUM(단가)- 문제 TIP ! 쿼리 or 주석 내용에 해결방안이 있는 경우가 많음
- 테이블 병합 / 테이블 분할 / 테이블 추가
- 테이블 병합 : 1:1 관계 테이블 병합 , 1:M 관계 테이블 병합, 슈퍼/서브타입 테이블 병합
- 슈퍼타입{회원} ⇔ 서브타입 {개인회원, 법인회원}
- 테이블 분할
- 수직분할 : [a,b,c,d] 컬럼 → [a,b] [c,d] 로 분리하여 보관
- 수평분할 : 하나의 테이블에 있는 값을 기준으로 테이블 분할 ( Partition 기법 )
ex. 매일 쌓이는 고객별 위치 정보를 한 테이블에 넣어두면 엑세스 범위가 넓음 → 연도별로 쪼개서 저장
- - 테이블 추가 : 중복테이블, 통계테이블, 이력테이블, 부분테이블
기타 성능 관련 개념 정리
- 한 테이블에 너무 많은 칼럼이 존재하여 로우체이닝이 발생하는 등 조회성능 저하가 발생한다면
→ 트랜잭션이 접근하는 칼럼 유형을 분석해 테이블을 분리하면, 디스크 I/O가 줄어서 성능이 향상될 수 있다. - WHERE문을 통해 조회를 할 때 자주 사용되는 PK순으로 순서를 변경하고 인덱스를 생성하는 것이 성능에 유리할 수 있다.
ex) WHERE 지역명 = ‘서울’ AND 출시일 BETWEEN ‘20220101’ AND ‘20220331’
→ (1) 상수값으로 조회하는 PK (2) 범위로 조회하는 PK 순
→ 앞쪽에 위치한 속성의 값이 가급적 ‘=’, 최소한 범위를 나타내는 ‘BETWEEN’, ‘<’’>’ 가 들어와야 인덱스를 사용할 수 있다. - 트랜잭션의 통합/개별 처리 케이스
- 데이터 전체를 대상으로 일괄 처리하는데 테이블이 분리되어 개별로 관리하면 오히려 연산량을 늘릴 수 있고
- 데이터를 개별로 처리하는데 테이블은 하나로 통합되어 관리하면 불필요하게 많은 데이터의 집적으로 성능이 저하될 수있음
→ 트랜잭션을 통합하여 처리하면 통합해두는 것이 성능에 좋고, 개별로 처리하면 개별로 유지하는 것이 좋다.
SQLD 목차 바로가기
728x90
반응형
'자격증 > SQLD' 카테고리의 다른 글
[SQLD 자격증] 1과목 | 관계, 식별자 (0) | 2023.03.06 |
---|---|
[SQLD 자격증] 1과목 | 데이터모델의 이해, 엔터티, 속성 (0) | 2023.03.06 |
[SQLD 자격증] 2과목 | 옵티마이저 JOIN 설명 & 문제풀이 (0) | 2023.03.06 |
[SQLD 자격증] 2과목 | 테이블 파티션, 옵티마이저, 인덱스 설명 & 문제풀이 (0) | 2023.03.06 |
[SQLD 자격증] 2과목 | WINDOW 함수 전체 설명 & 문제풀이 (0) | 2023.03.06 |
댓글