한테이블에 모든 정보를 모아놓으면(반정규화) 조인에 의한 부하가 줄어들거라는 기대를 하게된다.
하지만 고려해야되는 것들이 있다.
1. 저장공간의 낭비가 생긴다.
2. I/O가 증가된다.(특히 블럭단위 조회시)
아래 예가 있다.
만일 사원이 40만명이라면
40만 레코드 X 168 Byte
= 67,200,000 Byte
= 64Mbyte
64Mbyte 의 저장공간이 필요하게 된다.
그리고 만일 DB에서 한번에 읽어들이는 블록이 8Kbyte 라면
한번 I/O 때 48개의 레코드를 읽게 된다.
정규화를 한 위의 사원테이블과 부서테이블은 각각
사원 테이블
40만 레코드 X 46 Byte
= 18,400,000 Byte
= 17.5Mbyte
부서 테이블
100 레코드X 130Byte
= 12Kbyte
약 17.6Mbyte 의 저장공간이면 되고
DB에서 한번에 읽어들이는 블록이 대략 178개 레코드를 읽을 수 있다.
즉
저장공간에서는 3배가 줄어들게 되고
풀 스캔시 4배의 I/O 가 감소되게 된다.
실제 필드에서는 수천만 수억, 수십억의 레코드가 있는 테이블도 있으므로 성능의 차이는 더 커진다.