SQL 반정규화 정리

2023. 8. 31. 16:35DATA PROGRAMMING/SQL

SQL에서 반정규화란 정규화의 반대되는 표현이다.

 

SQL 반정규화

 

보통 정규화는 하나의 테이블을 쪼갬으로써 조회를 함에 있어서 성능을 올리기 위해 사용한다. 반대로 반정규화는 필요에 의해 데이터를 중복하여 성능을 향상시키기 위한 기법인데, 이때 중복을 하다보니 데이터 무결성이 깨질수도 있다는 위험이 존재한다. 하지만 지나치게 정규화 된 데이터는 디스크 I/O량이 많아 성능이 저하되거나 많은 조인 연산으로 계산량이 증가하여 선능이 감소할수 있다. 이를 방지하기 위해 사용할수 있는 하나의 선택지가 반정규화인것이다.

 

반정규화 절차

 

반정규화는 치명적인 오류가 생길수 있어 난이도 높은 데이터 모델링 기술이라고 볼 수 있다. 반정규화의 절차를 보면, 

1. 반정규화 대상 조사

2. 다른 방법 유도 검토

3. 반정규화 적용

이 있는데, 2단계 '다른 방법 유도 검토'라는 과정이 따로 있을 만큼 반정규화를 사용하지 않고도 다른 해결 방법이 존재한다면, 그 방법을 선택하는게 좋다. 예를 들면 뷰 테이블, 클러스터링 적용, 인덱스의 조정, 응용 애플리케이션 사용 등이 있다.

 

 

반정규화 기법

 

1. 테이블 반정규화

테이블 병합 

테이블 분할 - 컬럼의 수가 많아지면 여러 블록에 걸쳐 데이터가 저장될수 있다. 이럴시에 절대적인 Blodck I/O의 횟수가 많아지면서 성능이 떨어진다.

이에 지나치게 많은 컬럼을 가진 테이블은 수직분할 하거나 대용량의 테이블은 수평분할을 함으로써 문제를 해결할 수 있다. 이때 수평분할에는 RANGE PARTITION (ex. 데이터를 기간에 따라서 분류함), LIST PARTITION(ex. 데이터를 지역에 따라서 분류함), HASH PARTITION(HASH 함수를 활용하여 주로 너무 많은 데이터가 갑자기 몰릴때 발생하는 병목현상을 방지할 수 있음)

테이블 추가 - 테이블을 추가함으로써 동일한 테이블 구조를 중복하여 원격 조인을 제거하여 성능을 향상시키거나, 통계 테이블, 이력 테이블 등을 추가하여 조회 시 성능을 향상시킬 수 있다.

 

2. 칼럼의 반정규화

중복 칼럼 추가 - 조인을 감소시키는 효과

파생 칼럼 추가 - 미리 계산한 값을 추가하는 등

이력 테이블 칼럼 추가

PK에 의한 칼럼 추가 - 복합의미를 갖는 pk에서 정보를 떼어내 칼럼을 추가한다 (ex. 주민 등록 번호에서 생년 정보를 빼서 칼럼으로 만든다.)

응용시스템의 오작동을 위한 칼럼 추가

 

3. 관계 반정규화

중복 관계 추가 - 여러 단계에 걸쳐 조인해야하는 두 테이블이 존재할때 그 두 테이블을 바로 조인해줄수 있는 관계를 설정해 준다. 이 방법은 데이터 무결성을 깨뜨릴 위험을 갖지 않고서도 데이터처리의 성능을 향상시킬 수 있는 반정규화의 기법이 된다.