메뉴 건너뛰기

bysql.net

제2절_정규화와_성능

2012.03.04 10:52

ljw 조회 수:10394

2절 정규화와 성능

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


정규화란?

속성들간의 종속성을 분석해서 기본적으로 하나의 종속성이 하나의 릴레이션으로 표현되도록 분해해 나가는 과정

데이터 처리의 입력/수정/삭제이상을 제거하기 위해 분리 통합하는 방법

데이터 모델을 구조화시키고 개선시켜나가는 절차

→  정보가 손실되지 않고 중복성을 제거하는 절차

SQL_074.jpg


정규화 내용 정리 

크기변환_IMAG0338.jpg


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

2차 정규화가  안된 경우

사례1

SQL_075.jpg 


만약 조건을 관서등록일자로 검색하는 경우

반정규화 경우 : 같은 관서등록일자 데이터를 누적된 데이터양 만큼 조회

정규화 경우 : 필요한 관서번호만 읽고 조인



사례2

어떤 물건을 매각할 때 매각일자를 정하고 그 일자에 해당하는 매각시간과 매각장소가 결정하는 속성의 성격을 가짐.

→ 매각일자:결정자  매각시간,매각장소 : 의존자  함수 종속성


SQL_077.jpg 

특정 매각장소에서 매각된 총매각금액, 총유찰금액을 조회할 경우


SELECT B.총매각금액 , B.총유찰금액 

   FROM (SELECT DISTINCT 매각일자, 매각장소

                   FROM 일자별매각물건 

      WHERE 매각장소 = '서울 7호') A, <== 100만건의 데이터를 읽어 DISTINCT함 

      매각일자별매각내역 B 

WHERE A.매각일자 = B.매각일자 

     AND A.매각장소 = B.매각장소;




SQL_079.jpg 

SELECT B.총매각금액 , B.총유찰금액 

    FROM 매각기일 A, 매각일자별매각내역 B 

 WHERE A.매각장소 = '서울 7호' <== 5천건의 데이터를 읽음 

       AND A.매각일자 = B.매각일자 

       AND A.매각장소 = B.매각장소;





사례3

동일한 속성 형식을 두개 이상의 속성으로 나열 → 속성중복(1정규화 위배)

SQL_081.jpg 

SELECT 모델코드, 모델명 

    FROM 모델 

 WHERE ( A유형기능분류코드1 = '01' )

         OR ( B유형기능분류코드2 = '02' ) 

         OR ( C유형기능분류코드3 = '07' ) 

         OR ( D유형기능분류코드4 = '01' )

         OR ( E유형기능분류코드5 = '02' ) 

         OR ( F유형기능분류코드6 = '07' ) 

         OR ( G유형기능분류코드7 = '03' ) 

         OR ( H유형기능분류코드8 = '09' ) 

         OR ( I유형기능분류코드9 = '09' ) 


인덱스 과다로 인한 입력/수정/삭제 성능 저하. 위의 쿼리에서 or 조건에 해당하는 컬럼중 하나라도 인덱스가 생성되어있지 않을 경우 조회시 성능저하.





SQL_084.jpg 


유형추가시에도 테이블 구조가 변경될 필요 없는 유연한 데이터 모델





사례4

1정규화 위반사례로 동일함

SQL_086.jpg



6.함수적 종속성에 근거한 정규화 수행 필요

함수의 종속성은 데이터들이 어떤 기준값에 의해 종속되는 형상을 지칭하는 것.

이때 기준값을 결정자, 종속되는 값을 종속자라고 한다.


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

→ 함수의 종속성을 이용하여 정규화 작업 진행에 이용


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

SQL_087.jpg