1. 정규화를 통한 성능 향상 전략
2. 반정규화된 테이블의 성능저하 사례1
3. 반정규화된 테이블의 성능저하 사례2
4. 반정규화된 테이블의 성능저하 사례3
5. 반정규화된 테이블의 성능저하 사례4
6. 함수적 종속성(Functional Dependency)에 근거한 정규화 수행 필요
정규화 vs 반정규화
반정규화만이 조회성능을 향상시킨다는 고정관념에서 탈피해야함,
정규화된 경우가 오히려 성능이 뛰어난 경우가 많음
반정규화
SELECT 관서명,공무원명
FROM 정부보관금관서원장
WHERE 관서번호=1000 AND 납부자번호 ='A1000';
정규화
SELECT A.관서명, B.공무원명
FROM 관서 A, 정부보관금관서원장 B
WHERE A.관서번호=B.관서번호
AND A.관서번호=1000
AND B.납부자번호 ='A1000';
반정규화
SELECT DISTINCT 관서명
FROM 정부보관금관서원장
WHERE 관서등록일자 >= TO_DATE('20100101', 'YYYYMMDD');
정규화
SELECT 관서명
FROM 정부보관금관서원장
WHERE 관서등록일자 >= TO_DATE('20100101', 'YYYYMMDD');
반정규화
SELECT B.총매각금액 , B.총유찰금액
FROM (SELECT DISTINCT 매각일자
FROM 일자별매각물건
WHERE 매각장소 = '서울 7호') A
, 매각일자별매각내역 B
WHERE A.매각일자 = B.매각일자
AND A.매각장소 = B.매각장소;
정규화
SELECT B.총매각금액 , B.총유찰금액
FROM 매각기일 A, 매각일자별매각내역 B
WHERE A.매각장소 = '서울 7호'
AND A.매각일자 = B.매각일자 AND A.매각장소 = B.매각장소;
반정규화
SELECT 모델코드, 모델명
FROM 모델
WHERE ( A유형기능분류코드1 = '01' )
OR ( B유형기능분류코드2 = '02' )
OR ( C유형기능분류코드3 = '07' )
OR ( D유형기능분류코드4 = '01' )
OR ( E유형기능분류코드5 = '02' )
OR ( F유형기능분류코드6 = '07' )
OR ( G유형기능분류코드7 = '03' )
OR ( H유형기능분류코드8 = '09' )
OR ( I유형기능분류코드9 = '09' )
;
정규화
SELECT A.모델코드, A.모델명 FROM 모델 A, 모델기능분류코드 B
WHERE ( B.유형코드 = 'A' AND B.기능분류코드 = '01' AND A.모델코드 = B.모델코드 )
OR ( B.유형코드 = 'B' AND B.기능분류코드 = '02' AND A.모델코드 = B.모델코드 )
OR ( B.유형코드 = 'C' AND B.기능분류코드 = '07' AND A.모델코드 = B.모델코드 )
OR ( B.유형코드 = 'D' AND B.기능분류코드 = '01' AND A.모델코드 = B.모델코드 )
OR ( B.유형코드 = 'E' AND B.기능분류코드 = '02' AND A.모델코드 = B.모델코드 )
OR ( B.유형코드 = 'F' AND B.기능분류코드 = '07' AND A.모델코드 = B.모델코드 )
OR ( B.유형코드 = 'G' AND B.기능분류코드 = '03' AND A.모델코드 = B.모델코드 )
OR ( B.유형코드 = 'H' AND B.기능분류코드 = '09' AND A.모델코드 = B.모델코드 )
OR ( B.유형코드 = 'I' AND B.기능분류코드 = '09' AND A.모델코드 = B.모델코드 )
;