본문 바로가기
SQLD/제2장. 데이터 모델과 성능

제2절. 정규화와 성능

by 헤옹스 2017. 5. 20.

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

데이터 모델링을 하면서 정규화를 하는 것은 기본적으로 데이터에 대한 중복성을 제거하여 주고 데이터가 관심사별로 처리되는 경우가 많기 때문에 성능이 향상되는 특징을 가지고 있다. 물론 엔터티가 계속 발생되므로 SQL문장에서 조인이 많이 발생하여 이로 인한 성능저하가 나타나는 경우도 있지만 이런 부분은 사례별로 유의하여 반정규화를 적용하는 전략이 필요하다.

 

정규화를 수행하면 항상 조회 성능이 저하되어 나타날까?

데이터처리의 성능이 무엇인지 정확히 구분하여 인식할 필요가 있다. 데이터베이스에서 데이터를 처리할 때 성능이라고 하면 조회 성능과 입력/수정/삭제 성능의 두 부류로 구분된다. 이 두가지성능이 모두 우수하면 좋겠지만 데이터 모델을 ㄱ구성하는 방식에 따라 두 성능이 trade-off되어 나타나는 경우가 많이 있다.

 

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

 

그림을 보면 정규화 수행 모델은 데이터를 입력/수정/삭제할 때 일반적으로 반정규화된 테이블에 비해 처리 성능이 향상된다. 단 데이터를 조회할 때에는 처리 조건에 따라 조회 성능이 향상될 수도 있고 저하될 수도 있다.

 

따라서 일반적으로 정규화가 잘 되어 있으면 입력/수정/삭제의 성능이 향상되고 반정규화를 많이 하면 조회의 성능이 향상된다고 인식될 수 있다. 그러나 데이터 모델링을 할 때 반정규화만이 조회 성능을 향상시킨다는 고정관념은 탈피되어야 한다. 정규화를 해서 성능이 저하되기는 커녕 정규화를 해야만 성능이 향상되는 경우가 아주 많이 나타나기 때문이다.

 

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

 

정규화하여 조인이 발생하면 성능이 심각하게 저하되는가?

2차 정규화를 적용한 테이블에 대해서 조인을 하더라도 PK Unique Inde를 이용하면 조인 성능 저하는 미미하게 발생된다.

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

 

 

 

 

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

 

 

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

 

 

5. 반정규화된 테이블의 성능저하 사례4

 

 

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