메뉴 건너뛰기

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

번호 제목 글쓴이 날짜 조회 수
58 Week1_박우창 [1] balto 2012.07.17 9893
57 Week1_이주영 suspace 2012.07.17 5026
56 Week1_승대수 보라빛고양이 2012.07.17 3053
55 Week1_이진우 [5] ljw 2012.07.16 46281
54 Week1_위충환 [1] 실천하자 2012.07.16 9273
53 문제작성 실천하자 2012.07.16 5794
52 제5절_배치_프로그램_튜닝 보라빛고양이 2012.07.04 6906
51 제4절_파티션_활용 오예스 2012.06.26 5753
50 제3절_DML_튜닝 balto 2012.06.13 9074
49 제1절_고급_SQL_활용 실천하자 2012.06.11 6287
48 제1절 고급 SQL 활용 실천하자 2012.06.11 8397
47 제4절_고급_조인_기법 suspace 2012.06.05 31240
46 제2절_소트_튜닝 file ljw 2012.06.04 12024
45 제3절 조인 기본 원리 보라빛고양이 2012.05.30 6980
44 제1절_인덱스_기본_원리 오예스 2012.05.22 7100
43 제2절_인덱스_튜닝 balto 2012.05.18 9904
42 제2절_쿼리변환 ljw 2012.05.14 5614
41 제1절_옵티마이저 실천하자 2012.05.12 7185
40 제3절_동시성_제어 운영자 2012.05.08 6037
39 제1절_Lock balto 2012.05.05 25259