재미로하는 공부

[sqld] 데이터 모델링 정규화와 성능

lowcodingpython 2022. 4. 1. 17:34
반응형

정규화의 문제점

  • 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높인다.
  • 데이터 조회(SELECT) 시에 조인(Join)을 유발하기 때문에 CPU와 메모리를 많이 사용 

 

정규환-테이블

  • 위와 같이 두 개의 테이블로 이루어진 경우 "사원번호, 부서 코드, 부서명, 이름, 전화번호, 주소"를 조회하려면 조인을 해야 합니다.

조인을 사용

SELECT 사원번호, 부서코드, 부서명, 이름, 전화번호, 주소
 FROM 직원, 부서
WHERE 직원, 부서코드 = 부서, 부서코드;

***ANSI JOIN

SELECT문은 ANSI Join으로 작성하면

SELECT 사원번호, 부서코드, 부서명, 이름, 전화번호, 주소
 FROM 직원 INNER JOIN 부서
ON 직원,부서코드 = 부서, 부서코드;
  • 위의 테이블은 직원과 부서 테이블에서 부서 코드가 같은 것을 찾는 것이며 프로그램화를 하게 되면 중첩된 루프를 사용해야 합니다.
  • 아래를 참고해주시면 됩니다.

> 중첩된 루프(Nested Loop)

for(i=0; i<N; i=i+1)
  for(j=0; j<M; j=j+1)
    if(직원_부서코드[i] == 부서_부서코드[i]){  }

정규화를 사용한 성능 튜닝 

  • 조인으로 인하여 성능이 저하되는 문제를 반정규화로 해결할 수 있다.
  • 반정규화는 데이터를 중복시키기 때문에 또 다른 문제점을 발생시킨다.

계좌마스터-테이블

  • 예처럼 계좌 마스터의 칼럼이 계속적으로 증가하면 조인이 최소화되기 때문에 조회를 빠르게 할 수 있을 것 
  • 너무 많은 칼럼이 추가되면 한 개 행의 크기가 데이터베이스 관리 시스템의 입출력 단위인 블록의 크기를 넘어서게 된다.
  • 한 개의 행을 읽기 위해서 여러 개의 블록을 읽어야 하며 한 행을 읽기 위해서 여러 개의 블록을 읽게 되면 디스크 입출력이 증가하기 때문에 성능이 떨어지게 됩니다. 반정규화는 이런 문제점 유발할 수 있다.
  • 테이블을 분해하는 방법밖에 없다. 따라서 정규화는 입출력 데이터의 양을 줄여서 성능을 향상할 수 있습니다.
반응형