메뉴 건너뛰기

bysql.net

제3절_반정규화와_성능

2012.03.04 11:02

ljw 조회 수:15292

제3절 반정규화와 성능

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


가.반정규화의 정의

반정규화 : 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리등을 수행하는 데이터 모델링 기법.

SQL_089.jpg 


반정규화를 기술적으로 수행하지 않은경우 다음과 같은 현상이 발생할 수 있음

  • 성능이 저하된 데이터베이스가 생성될 수 있다.
  • 구축단계나 시험단계에서 반정규화를 적용할 때 수정에 따른 노력비용이 많이 들게 된다.


나.반정규화의 작용방법

무분별하게 칼럼의 반정규화를 많이 하게 되는 것은 데이터에 대한 무결성을 깨드리는 결과를 초래함. → 무결성을 보장할 수 있는 방법을 고려한후 반정규화를 해야함SQL_090.jpg 


1.반정규화 대상 조사

  • 자주 사용되는 테이블에 접근하는 프로세스의 수가 많고 항상 일정한 범위만을 조회하는 경우
  • 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리범위를 일정하게 줄이지 않으면 성능을 보장할 수 없을 경우
  • 통계성 프로세스에 의해 통계 정보를 필요로 할때 별도의 통계테이블을 생성한다.
  • 테이블에 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려운 경우

2.반정규화의 대상에 대한 다른 방법으로 처리할 수 있는지 조사
  • 지나치게 많은 조인이 걸린경우 → view를 사용한 단순화
  • 대량의 데이터 처리 → 파티션 or 클러스터
  • 어플리케이션 레벨에서 중간 데이터 캐쉬



가.테이블 반정규화

SQL_091.jpg 



나.칼럼 반정규화SQL_092.jpg 



다.관계반정규화

SQL_093.jpg 




3.정규화가 잘 정의된 데이터 모델에서 성능이 저하될 수 있는경우

SQL_094.jpg 


가장 최근에 변경된 전화번호, 메일주소, 위치를 가져오는 쿼리



SELECT A.공급자명, B.전화번호, C.메일주소, D.위치 

   FROM 공급자 A, (SELECT X.공급자번호, X.전화번호 

                               FROM 전화번호 X, (SELECT 공급자번호, MAX(순번) 순번 

                                                              FROM 전화번호

                                                             WHERE 공급자번호 BETWEEN '1001' AND '1005' 

             GROUP BY 공급자번호) Y 

               WHERE X.공급자번호 = Y.공급자번호 

                              AND X.순번 = Y.순번) B, 

                           (SELECT X.공급자번호, X.메일주소 

                               FROM 메일주소 X, (SELECT 공급자번호, MAX(순번) 순번 

                                                              FROM 메일주소 

                                                             WHERE 공급자번호 BETWEEN '1001' AND '1005' 

             GROUP BY 공급자번호) Y 

    WHERE X.공급자번호 = Y.공급자번호 

               AND X.순번 = Y.순번) C, 

         (SELECT X.공급자번호, X.위치 

             FROM 위치 X, (SELECT 공급자번호, MAX(순번) 순번 

      FROM 위치 WHERE 공급자번호 BETWEEN '1001' AND '1005' 

               GROUP BY 공급자번호) Y 

          WHERE X.공급자번호 = Y.공급자번호 

      AND X.순번 = Y.순번) D 

    WHERE A.공급자번호 = B.공급자번호 

          AND A.공급자번호 = C.공급자번호 

          AND A.공급자번호 = D.공급자번호 

          AND A.공급자번호 BETWEEN '1001' AND '1005' 




SQL_096.jpg 

가장 최근 값을 반정규화함




4.정규화가 잘 정의된 데이터 모델에서 성능이 저하된 경우

서버B에 연계테이블의 부서명을 위해 서버 A의 부서 테이블과 조인이 필요한경우

→ DB LINK를 통해 조회함으로써 성능상 문제 발생

SQL_099.jpg


반정규화

부서명을 서버B의 연계테이블에 반정규화함으로써 불필요하면 DB LINK 조인 방지

SQL_101.jpg

번호 제목 글쓴이 날짜 조회 수
58 Front Page file 운영자 2012.02.21 186700
57 Week1_이진우 [5] ljw 2012.07.16 46276
56 제1절_성능_데이터_모델링의_개요 file ljw 2012.03.04 44546
55 제4절_고급_조인_기법 suspace 2012.06.05 31240
54 제1절_Lock balto 2012.05.05 25259
53 제1절_데이터_모델의_이해 실천하자 2012.03.04 22594
52 제5절_식별자 file ljw 2012.03.04 18958
51 제1절_표준_조인(STANDARD_JOIN) file ljw 2012.03.19 15924
» 제3절_반정규화와_성능 file ljw 2012.03.04 15292
49 제5절_WHERE_절 file 보라빛고양이 2012.03.10 14879
48 제4절_관계(Relationship) [1] 실천하자 2012.03.04 13028
47 제5절_그룹_함수(GROUP_FUNCTION) file balto 2012.03.31 12458
46 제2절_소트_튜닝 file ljw 2012.06.04 12024
45 제2절_DDL(DATA_DEFINITION_LANGUAGE) [1] file balto 2012.03.09 11722
44 제7절_GROUP_BY_HAVING_절 suspace 2012.03.12 11531
43 제1절_데이터베이스_아키텍처 [2] ljw 2012.04.23 11523
42 제4절_서브쿼리 오예스 2012.03.27 11508
41 제1절_관계형_데이터베이스_개요 balto 2012.03.09 10446
40 제2절_정규화와_성능 file ljw 2012.03.04 10394
39 제2절_인덱스_튜닝 balto 2012.05.18 9904