메뉴 건너뛰기

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