제 7절 정규화와 성능

연쇄코딩마·2022년 9월 29일
0

정규화를 통한 성능 전략

  • 데이터를 정규화 하는 것은 기본적으로 데이터에 대한 중복성을 제거해주고 데이터가 관심사 별로 처리 되는 경우가 많다. 그래서 성능 향상에 유리하다.
  • 엔티티가 계속 증가하기 때문에 SQL문장에서 계속 조인이 발생하기 때문에 때에 따라서 반정규화를 해줘야한다.

정규화를 수행하면 항상 조회 성능이 저하 될까?

db에서 성능이라고 한다면 조회, 입력/수정/삭제 성능 두류 나뉠수 있다. 두 가지 성능이 모두 우수하면 좋지만 데이터 모델링 방식에 따라 모순적인 경우가 많다.

정규화를 수행한다는 것은 데이터를 결정하는 결정자(PK)같은 것에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것이다.

데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미에서 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 용량을 최소화하는데 효과가 있다. 따라서 정규화된 테이블은 데이터를 처리 할때 속도가 빨라 질수도 있고 느려질수도 있다.

조회성능은 처리 조건의 따라 느려질수도 빨라질수도 있으며 입력/수정/삭제/성능은 향상된다.

반정규화 된 테이블의 성능저하 사례1

왼쪽은 정규화가 안된 반정규화된 테이블이고 오른쪽은 부분키를 종속을 정규화하여 두개의 테이블로 분리해 2차 정규화된 테이블이다.

2차 정규화가 안된 테이블은 직급명과 함께 모든 데이터가 조회된다.
2차 정규화가 된 테이블은 관서번호, 관서명이 관서테이블에서만 존재하기 때문에 두개의 테이블을 조인하여 처리해야 한다.

이는 데이터 조회성능은 사용자가 느끼기에는 별로 차이가 안난다. PK가 걸려 있는 방향으로 조인이 걸려 unique 인덱스를 곧바로 찾아서 조회하기 떄문에 하나의 테이블에서 조회하는 방법이나 비교가 어렵다.

만약 관서등록일자가 2010년 이후 관서를 모두 조회하라라는 문제는 2차 정규화된 테이블이 훨씬 빠르다. 불필요하게 납부자번호 만큼 누적된 데이터를 날짜별로 구분해서 보여줘야 되지만 오른쪽은 관서수만큼 존재하는 데이터를 읽어 곧바로 보여준다.

반정규화 된 테이블의 성능저하 사례2

두 개의 엔티티가 통합 되어 반정규화된 케이스이다. 어떤 물건을 매각할 때 매각일자를 정하고 그일자에 해당하는 매각시간과 매각장소가 결정하는 속성의 성격을 가지고 있다. 즉 매각 일자가 결정자가 되고 매각 시간과 매각장소가 의존자가 되는 함수적 종속 관계가 되는 함수적 종속 관계이다. 매각일자는 5천건이고 일자별 매각 물건을 100만건이 있다고 가정하자.

SELECT B.총매각금액 , B.총유찰금액 FROM (SELECT DISTINCT 매각일자 FROM 일자별매각물건 WHERE 매각장소 = '서울 7호') A, <== 100만건의 데이터를 읽어 DISTINCT함 매각일자별매각내역 B WHERE A.매각일자 = B.매각일자 AND A.매각장소 = B.매각장소

서울 7호 에서 매각된 총매각 금액, 총유찰 금액을 산출하는 조회용 SQL문은 위와 같다. 이조건에서는 조인 조건이 되는 대상을 찾기 위해 인라인뷰를 사용하기 때문에 성능이 저하된다.

2차 정규화를 적용하여 매각일자를 PK로 하고 매각시간과 매각장소는 일반속성이 되었다. 정규화를 적용했기 때문에 매각일자를 PK로 사용하는 매각일자별매각내역과도 관계가 연결된다. 이러면 정확한 데이터 모델링도 가능해지고 매각 기일 테이블됨으로 인해 성능이 향상된다. 아까 했던 SQL문을 똑같이 적용하면 다음과 같이 나온다.

SELECT B.총매각금액 , B.총유찰금액 FROM 매각기일 A, 매각일자별매각내역 B WHERE A.매각장소 = '서울 7호' <== 5천건의 데이터를 읽음 AND A.매각일자 = B.매각일자 AND A.매각장소 = B.매각장소

매각 기일 테이블이 정규화 되면서 드라이빙되는 대상 테이블의 데이터가 5천건으로 줄어들어 조회가 빨라진다.

함수적 종속성(Functional Dependency)에 근거한 정규화 수행필요

정의 : 데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭하는 것이다. 이때 기준값을 결정자(Determinant)라고 하고 종속되는 값을 종속자(Dependent)라고 한다.

예: 사람이라는 엔티티는 주민등록번호, 이름, 출생지, 호주라는 속성이 존재한다. 여기에서 이름, 출생지, 호주라는 속성은 주민등록번호에 속성에 종속된다. 이를 기호로 표시하면 다음과 같다.

주민등록번호=>(이름, 출생지, 호주)

정규화의 목적은 반복적인 데이터를 줄이고 각 데이터가 종속된 테이블에 적절하게 작업에 이용되는 것이다.
기본적으로 데이터는 속성간의 함수 종속성에 근거하여 정규화되어야한다.

원본 참조 한국데이터산업진흥원

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

0개의 댓글

관련 채용 정보