본문 바로가기

자격증/SQLD 자격증

[SQLD자격증강좌] 9강 정규화의 문제점과 성능 - 오쌤의 니가스터디

728x90
반응형

 

 

 

 

 

 

 

 

1. 정규화의 문제점


- 정규화는 데이터 조회(SELECT) 시에 조인(JOIN)을 유발하기 때문에 CPU와 메모리를 많이 사용합니다. 

정규화된 테이블

- 위 그림과 같이 두 개의 테이블로 이루어진 경우 "회원ID, 등급코드, 등급명, 이름, 전화번호"를 조회하려면 조인을 해야 합니다. 

 

## 조인의 사용

SELECT 회원ID, 등급코드, 등급명, 이름, 전화번호
FROM 회원, 등급
WHERE 회원.등급코드 = 등급.등급코드

- 위의 SQL문은 ANSI join을 사용할수도 있으나 넘어가겠습니다.

- 위의 테이블은 회원과 등급테이블에서 등급코드가 같은 것을 찾는 것입니다.

 

- 이것을 프로그램화한다면 중첩된 루프, for문같은 것을 사용해야 합니다. 

 

## 중첩된 루프

for(i=0;i<N;i++){
	for(j=0;j<M;j++){
    	if(회원.등급코드[i] == 등급.등급코드[j]){
        	데이터반환
        }
    }
}

- 위의 코드에서 N은 회원테이블의 건수고, M은 등급테이블의 건수입니다.

- 결과적으로 이런 구조는 데이터 양이 증가하면 비교해야하는 건수도 증가합니다.

- 물론 실제로는 위와 같은 비효율이 발생하지는 않습니다.

- 이런 문제를 해결하기 위해서 인덱스와 옵티마이저가 있기 때문입니다.

- 근데 이 코드를 보여준 것은 조인이 일어난다는 것은 컴퓨터가 조회 시 부하가 발생된다는 것을 보여드리기 위함입니다.

- 정규화의 문제점을 해결하기 위해 반정규화를 해서 하나의 테이블에 저장한다면 조인을 통한 성능저하는 해결이 됩니다.

- 이런 성능 저하를 해결하기 위해 반정규화가 있는 것입니다. 

 

 

 

 

 

 

 

 

728x90
반응형

 

 

 

 

 

 

 

 

 

 

2. 정규화를 사용한 성능 튜닝


- 조인으로 인하여 성능이 저하되는 문제를 반정규화로 해결할 수 있습니다.

- 하지만 반정규화는 데이터를 중복시키기 때문에 또 다른 문제점을 발생시킵니다. 

- 위 그림과 같이 테이블을 만들면 조회는 빠르게 할 수 있습니다.

- 하지만 너무 만큼 칼럼을 추가하면 한 개의 행 크기가 데이터베이스 관리 시스템의 입출력 단위인 블록의 크기를 넘어가게 됩니다.

- 그렇게 되면 한 개의 행을 읽기 위해서 여러 개의 블록을 읽어야 합니다.

- 한 행을 읽기 위해서 여러 개의 블록을 읽게 되면 디스크 입출력이 증가하기 때문에 성능이 떨어지게 됩니다.

- 반정규화는 이러한 문제점들을 유발할 수 있습니다.

- 이런 문제를 해결하려면 테이블을 분해하는 방법밖에는 없습니다.

- 따라서 정규화는 입출력 데이터 양을 줄여서 성능을 향상할 수 있는 것입니다. 

 

 

## 이론 문제 확인하기

다음 설명 중 옳지 않은 것은?
1. 정규화를 수행하면 조회 시에 조인의 수가 증가한다.
2. 반정규화된 테이블이 조회가 더 간단하다. 
3. 정규화는 업무가 변경이 되어도 모델의 유연성을 더 향상시킨다. 
4. 반정규화는 반드시 해야 한다.
더보기

정답 : 4

- 트랜잭션의 유형, 데이터 용량등을 고려해서 특별히 성능 이슈가 없으면 반정규화는 하지 않아도 됩니다. 

 

 

 

 

728x90
반응형