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

연쇄코딩마·2022년 10월 5일
0

사례1

위의 경우 공급자라고하는 엔터티가 마스터 이고 전화번호와 메일주소 위치가 각각변경되는 내용이 이력형태로 관리되는 모델이다.

공급자와 전화번호, 메일 주소, 위치는 1:M관계이므로 한 명의 공급자당 여러 개의 전화 번호, 메일주소, 위치가 존재한다. 따라서 가장 최근에 변경된 값을 가져오기 위해서는 조금 복잡한 조인이 발생될 수 밖에 없다.

다음 SQL은 위와 같은 조건을 만족하는 SQL구문이 된다.

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 구문을 쉽게 나올 수 있다.

SELECT 공급자명, 전화번호, 메일주소, 위치

  FROM 공급자

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

이런 간단한 sql문으로 대체할수 있다.

사례2

업무의 영역이 커짐에 따라 db서버가 어려대인 경우가 있다. 서로간 조인이 발생할 경우 특수한 환경 때문에 성능이 저하된다.

위의 모델을 통해 서버B의 연계테이블에서 부서명에 따른 연계상태코드를 가져오는 SQL구문은 다음과 같이 작성된다.

SELECT C.부서명,  A.연계상태코드

  FROM 연계 A,

       접수 B,

       부서 C  <== 서버A와 서버B가 조인이 걸림

 WHERE A.부서코드 = B.부서코드

   AND A.접수번호 = B.접수번호

   AND B.부서코드 = C.부서코드

   AND A.연계일자 BETWEEN '20040801' AND '20040901';


SELECT 부서명, 연계상태코드

  FROM 연계

 WHERE 연계일자 BETWEEN '20040801' AND '20040901';

위 모델에 대한 sql구문은 위와 같다.

sql구문도 간단해지고 분산되어있는 서버간에도 조인이 발생하지않아 성능이 개선되었다. 반정규화를 적용 할때 기억해야 할 내용은 데이터를 입력, 수정, 삭제 할때는 성능이 떨어지는 점을 기억해야 한다. 또한 무결성유지에 주의해야한다.

출처 : 제 3절 반정규화와 성능|작성자 지그드시

profile
只要功夫深,铁杵磨成针, 하고자 하면 쇠 막대기도 바늘로 만들 수 있다

0개의 댓글

관련 채용 정보