티스토리 뷰
1. 정규화를 통한 성능 향상 전략
▷ 정규화
: 기본적으로 데이터에 대한 중복성을 제거해준다. 데이터가 관심사별로 처리되는 경우가 많기 때문에 성능이 향상되는 특징이 있다.
엔터티가 계속 발생되므로 SQL 문장에서 JOIN 이 많이 발생하여 이로 인한 성능 저하가 나타날 수도 있다.
데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것이다.
Q . 정규화를 수행하면 항상 조회 성능이 저하되어 나타날까?
▷ 데이터 처리의 성능
: 데이터베이스에서 데이터를 처리할 때 (1)조회 성능과 (2)입력/수정/삭제 성능 이 있다.
데이터 모델을 구성하는 방식에 따라 두 성능이 Trade-OFF 되어 나타나는 경우가 많다.
중복 속성을 제거하고, 결정자에 의해 동일한 의미의 일반속성이 하나의 테이블로 집약되므로
한 테이블의 데이터 용량이 최소화되는 효과가 있다.
∴ 정규화된 테이블은 데이터 처리에 속도가 빨라질수도 느려질수도 있는 특성이다.
조회 성능 일 때 ) 성능이 향상 혹은 저하된다.
입력/수정/삭제 성능 일 때 ) 성능이 향상된다.
그러나 데이터 모델링에서 반정규화만이 조회 성능을 향상시키는 것은 아니다.
정규화를 해서 성능이 향상되는 경우가 아주 많기 때문이다.
2. 반정규화된 테이블의 성능저하 사례 (1)
2차 정규화를 적용한 테이블에 대해서 JOIN 을 하더라도 PK Unique Index 를 이용하면 JOIN 성능 저하가 미미하게 발생된다.
왼쪽은 하나의 테이블에서 조회가 되고, 오른쪽은 두 개의 테이블을 조인하여 처리해야 한다.
PK 가 걸려있는 방향으로 JOIN 이 걸려 Unique Index 를 곧바로 찾아서 데이터를 조회하기 때문에, 하나의 테이블이나 두 개의 테이블이나 비교했을 때 미미하게 성능 차이가 날 뿐, 사용자에게 영향을 줄 만큼 성능이 저하되지 않는다.
SQL 문장에 따라 정규화를 수행했을 때의 테이블이 빠른 경우도 있다.
정규화를 수행하면 무조건 조회 성능이 저하된다는 것은 아니라는 것이다.
3. 반정규화된 테이블의 성능저하 사례 (2)
어떤 물건을 매각할 때 매각일자를 정하고 매각시간, 매각장소가 결정하는 속성이다.
매각일자가 결정자가 결정되고 매각시간과 매각장소가 의존자가 되는 함수적 종속관계가 형성된다.
( 매각일자 : 5천건 / 일자별매각물건 : 100만건 )
매각장소 '서울 7호' 에서 매각된 ' 총 매각금액 ' 과 ' 총 유찰금액 ' 을 산출하는 조회용 SQL 문장
SELECT B.총매각금액, B.총유찰금액 FROM (SELECT DISTINCT 매각일자 FROM 일자별매각물건
WHERE 매각장소 = '서울 7호') A,
매각일자별매각내역 B
WHERE A.매각일자 = B.매각일자
AND A.매각장소 = B.매각장소;
인라인 뷰를 사용하면서 성능이 저하된다.
정규화하려면 복합식별자 중에서 일반속성이 주식별자 속성 중 일부에만 종속관계를 가지고 있으므로 2차 정규화의 대상이다.
** 2차 정규화 후
2차 정규화를 적용하여,
매각일자를 PK 로 하고 매각시간과 매각장소는 일반속성이 된다.
정확한 데이터 모델링 표기가 가능하고, 드라이빙이 된 테이블이 5천 건의 매각기일 테이블이 되므로 성능 향상된다.
SELECT B.총매각금액, B.총유찰금액 FROM 매각기일 A, 매각일자별매각내역 B
WHERE A.매각장소 = '서울 7호'
AND A.매각일자 = B.매각일자
AND A.매각장소 = B.매각장소;
드라이빙이 되는 대상 테이블의 데이터가 5천 건으로 줄어들어 조회 처리가 빨라진다.
4. 함수의 종속성 ( Functional Dependency ) 에 근거한 정규화 수행 필요
▷ 함수의 종속성
: 함수의 종속성 ( Functional Dependency ) 은 데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭한다.
기준값을 결정자 ( Determinant ) 라 하고 종속되는 값을 종속자 ( Dependent ) 라고 한다.
데이터가 가지고 있는 근본적인 속성이다.
주민등록번호가 신고되면, 그 사람의 이름, 출생지, 주소 가 생성되어 단지 하나의 값만을 가진다.
" 주민등록번호가 이름, 출생지, 주소를 함수적으로 결정한다. "
함수 종속성을 가지게 된다.
정규화의 궁극적인 목적은 반복적인 데이터를 분리하고 각 데이터가 종속된 테이블에 적절하게 배치되도록 하는 것이다.
( 프로세스에 의해 데이터의 정합성이 지켜질 수 있어야 함 )
함수의 종속성을 이용하여 정규화 작업이나 각 오브젝트에 속성을 배치하는 작업에 이용된다.
기본적으로 데이터는 속성간의 함수종속성에 근거하여 정규화해야 한다.
정규화의 이론을 숙지하고 정보시스템의 데이터를 설계해야한다.
'SQL > SQLD 1과목' 카테고리의 다른 글
SQLD - 과목1. (9) 대량 데이터에 따른 성능 (0) | 2021.04.27 |
---|---|
SQLD - 과목1. (8) 반정규화와 성능 (0) | 2021.03.18 |
SQLD - 과목1. (6) 성능 데이터 모델링 (0) | 2021.03.18 |
SQLD - 과목1. (5) 식별자 (1) | 2021.02.24 |
SQLD - 과목1. (4) 관계 (0) | 2021.02.08 |
- Total
- Today
- Yesterday
- SQLD
- SQLD1과목
- BAEKJOON
- 백준
- range함수
- 파이썬 입출력
- 파이썬sum
- SQLD40회
- 파이썬
- 데이터 모델링
- 네이버클라우드플랫폼
- python문법
- 백준파이썬
- 40회 SQLD
- 별 찍기
- 백준별찍기
- 파이썬문법
- 알고리즘
- f-string
- 백준 별찍기
- SUM함수
- python별찍기
- Python
- 파이썬for문
- Unity GameObject 생성
- SQLD 2과목
- SQLD 1과목
- NaverCloudPlatform
- 파이썬입출력
- 데이터베이스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |