[SQLD]2장 -2. 정규화와 성능

Yu River·2022년 7월 31일
0

SQL전문가가이드

목록 보기
7/34

[1] 정규화를 통한 성능 향상 전략

(1) 정규화

  • 데이터에 대한 중복성을 제거
  • 데이터가 관심사별로 처리되는 경우가 많음
    • 성능이 향상
  • 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것
  • 데이터의 중복속성을 제거하고 결정자에 의해 동일한 의미의 일반속성이 하나의 테이블로 집약되어 한 테이블의 데이터 용량이 최소화되는 효과

(1-1) 반정규화 적용 전략

엔터티가 계속 발생되므로 SQL문장에서 조인이 많이 발생하려 성능저하가 나타나는 경우 사례별로 유의하여 반정규화를 적용하는 전략이 필요하다.

(1-2)

  • 일반적으로 정규화 수행하면 데이터 처리 성능이 향상되지만
  • 데이터 조회처리 트랜잭션시 성능이 저하될 수 있다.
  • 하지만 정규화를 해서 성능이 저하되기는커녕 정규화를 해야만 성능이 향상되는 경우가 더 많음

(2) 데이터처리의 성능

-조회 성능과 입력/수정/삭제 성능의 두 부류로 구분된다.

  • 데이터 모델을 구성하는 방식에 따라 두 성능이 Trade-Off 되어 나타나는 경우가 많다.

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

  • 2차 정규화를 적용한 테이블에 대해서 조인을 하더라도 PK Unique Index를 이용하면 조인 성능 저하는 미미하게 발생
  • 관서와 정부 보관금 관서 원장을 조인하여 데이터를 조회하나 처리 성능은 사용자가 느끼기에는 거의 차이가 없다.
    • PK가 걸려있는 방향으로 조인이 걸려 Unique Index를 곧바로 찾아서 데이터를 조회하기 때문이다.
  • (?) 2차 정규화가 안 된 테이블이라면 직급명과 함께 반정규화된 관서번호, 관서명을 조회하면 하나의 테이블에서 데이터가 조회된다.
  • 2차 정규화된 테이블은 관서번호, 관서명이 관서테이블에만 존재하기 때문에 두 개의 테이블을 조인하여 처리한다.
  • 위의 예를 ‘관서등록일자가 2010년 이후 관서를 모두 조회하라’는 SQL 구문을 처리하는 것으로 바꾸면, 2차 정규화된 테이블이 훨씬 빠를 것이다.
    • 반정규화 테이블에서는 불필요하게 납부자번호만큼 누적된 데이터를 읽어서 결과를 구분하여 보여주어야 하지만 오른쪽은 관서수만큼만 존재하는 데이터를 읽어 곧바로 결과를 보여주기 때문이다.

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

  • 어떤 물건을 매각할 때 매각일자를 정하고 그 일자에 해당하는 매각시간과 매각장소가 결정하는 속성의 성격
    • 즉 매각일자가 결정자가 되고 매각시간과 매각장소가 의존자가 되는 함수적 종속관계가 형성되는 관계로 (?) 2차 정규화 (함수 종속성 해제)를 확인할 수 있다.

[(3-1)[0] 2차 정규화가 안 된 예시]

  • 데이터에서 조인 조건이 되는 대상을 찾기 위해 인라인뷰를 사용하기 때문에 성능이 저하된다.

[(3-2) 2차 정규화된 예시]

  • 복합식별자 중(매각물건번호,매각일자)에서 일반속성(매각장소)이 주식별자 속성(매각일자,매각장소) 중 일부에만 종속되는 관계이다.
  • 2차 정규화를 적용하여 매각일자를 PK로 하고 매각시간과 매각장소는 일반속성이다.
  • 정규화를 적용했기 때문에 매각일자를 PK로 사용하는 매각일자별 매각 내역과도 관계가 연결된다.
  • 따라서 업무흐름에 따른 적확한 데이터 모델링 표기도 가능해지고, 드라이빙이 된 테이블이 5천 건의 매각기일 테이블이 되므로 성능도 향상된다.

[반정규화된 테이블의 성능저하 사례3]

  • 다음 사례는 동일한 속성 형식을 두 개 이상의 속성으로 나열하여 반정규화한 경우에 해당된다.
    (A유형기능분류코드,B유형기능분류코드..)
  • 계층형 데이터베이스를 많이 사용했던 과거 데이터 모델링의 습관이 관계형 데이터베이스에서도 나타나 동일한 속성을 한 테이블에 속성1, 속성2, 속성3 데이터 모델링을 하는 경우가 많이 있다.
  • 모델이라고 하는 테이블에 업무적으로 필요한 8개의 인덱스가 이미 생성되어있고 유형기능분류코드에 따라 데이터를 조회하는 경우가 많이 나타나 인덱스를 생성하려면 유형기능분류코드 각각에 대해 인덱스를 생성해야 하므로 9개나 되는 인덱스를 추가 생성하는 경우(아쒸 여기 지워짐)
  • 1차 정규화 시도 (?)
    • 중복속성에 대한 분리가 1차 정규화의 정의임을 고려한다면 해당 예시는 1차 정규화의 대상이 된다.
    • (?) 로우단위의 대상도 1차 정규화의 대상이 되지만 칼럼 단위로 중복이 되는 경우도 1차 정규화의 대상이다.

(5) 1차 정규화와 2차 정규화(37,38,39)

(5-1) (?) 1차 정규화 대상

  • pk에 대해 반복이 되는 그룹이 존재하는 경우

(5-2) (?) 2차 정규화 대상

  • 함수 종속성의 규칙을 갖고 있는 경우
profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글