메뉴 건너뛰기

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 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