티스토리 뷰

1. 정규화를 통한 성능 향상 전략

▷ 정규화

    : 기본적으로 데이터에 대한 중복성을 제거해준다. 데이터가 관심사별로 처리되는 경우가 많기 때문에 성능이 향상되는 특징이 있다.

      엔터티가 계속 발생되므로 SQL 문장에서 JOIN 이 많이 발생하여 이로 인한 성능 저하가 나타날 수도 있다.

 

      데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것이다.

 

 

 

 

 

Q . 정규화를 수행하면 항상 조회 성능이 저하되어 나타날까?

 

▷ 데이터 처리의 성능

    : 데이터베이스에서 데이터를 처리할 때 (1)조회 성능과 (2)입력/수정/삭제 성능 이 있다.

      데이터 모델을 구성하는 방식에 따라 두 성능이 Trade-OFF 되어 나타나는 경우가 많다.

 

      중복 속성을 제거하고, 결정자에 의해 동일한 의미의 일반속성이 하나의 테이블로 집약되므로

      한 테이블의 데이터 용량이 최소화되는 효과가 있다.

      

      ∴ 정규화된 테이블은 데이터 처리에 속도가 빨라질수도 느려질수도 있는 특성이다. 

      

 

 

 

정규화 수행과 성능

 

 

조회 성능 일 때 ) 성능이 향상 혹은 저하된다.

입력/수정/삭제 성능 일 때 ) 성능이 향상된다.

 

그러나 데이터 모델링에서 반정규화만이 조회 성능을 향상시키는 것은 아니다.

정규화를 해서 성능이 향상되는 경우가 아주 많기 때문이다.

 

 

 

 

 

 

 

 

 

 


2. 반정규화된 테이블의 성능저하 사례 (1)

 

2차 정규화를 적용한 테이블에 대해서 JOIN 을 하더라도 PK Unique Index 를 이용하면 JOIN 성능 저하가 미미하게 발생된다.

 

 

정규화 (   왼쪽 : 정규화X   /  오른쪽 : 2차 정규화   )

 

 

정규화와 SQL

 

 

 

왼쪽은 하나의 테이블에서 조회가 되고, 오른쪽은 두 개의 테이블을 조인하여 처리해야 한다.

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 ) 라고 한다.

      데이터가 가지고 있는 근본적인 속성이다.

 

 

 

 

함수의 종속성

 

 

주민등록번호가 신고되면, 그 사람의 이름, 출생지, 주소 가 생성되어 단지 하나의 값만을 가진다.

 

" 주민등록번호가 이름, 출생지, 주소를 함수적으로 결정한다. "

함수 종속성을 가지게 된다.

 

 

 


 

정규화의 궁극적인 목적반복적인 데이터를 분리하고 각 데이터가 종속된 테이블에 적절하게 배치되도록 하는 것이다. 

( 프로세스에 의해 데이터의 정합성이 지켜질 수 있어야 함 )

함수의 종속성을 이용하여 정규화 작업이나 각 오브젝트에 속성을 배치하는 작업에 이용된다.

 

 

기본적으로 데이터는 속성간의 함수종속성에 근거하여 정규화해야 한다.

정규화의 이론을 숙지하고 정보시스템의 데이터를 설계해야한다.

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글