SQL study [21.08.15]
본문 바로가기
Data Base/Daily_study

SQL study [21.08.15]

by 조훈이 2021. 8. 15.

SQL study [21.08.15]


반 정규화

 * 간단한 정의 : 성능 향상을 위해 정규화를 포기하는 것 이다.

 * 성격 : 데이터의 무결성이 보장되는 것은 아니므로 제한적으로 사용을 해야한다.

테이블 반 정규화

테이블 병합

   - 비즈니스 로직 상 join 되는 경우가 많아서 통합하는 것이 성능 측면에서 유리할 경우 고려된다.

   - 종류

      a) 1:1 관계 테이블 병합

      b) 1:N 관계 테이블 병합

      c) 슈퍼 서브 타입 테이블 병합

 

테이블 분할

   - 종류

      a) 수직 분할 : Column 단위로 테이블을 1:1 분리

      b) 수평 분할 : Row 단위로 테이블을 분리

   

테이블 추가

   - 종류

      a) 중복테이블 추가 : 타 업무 또는 타 서버에 있는 테이블과 동일한 구조의 테이블을 추가. 원격 join 방지

      b) 통계테이블 추가 : 통계값을 미리 계산해서 저장하는 테이블 추가

      c) 이력테이블 추가 : 마스터 테이블에 존재하는 row를 트랜잭션 발생 시점에 따라 복사해두는 테이블 추가

      d) 부분테이블 추가 : 자주 조회되는 컬럼들만 별도로 모아놓은 테이블 추가


컬럼 반 정규화

중복컬럼 추가

   - join 프로세스를 줄이기 위해 중복 컬럼을 추가

   - SELECT 비용은 감소, UPDATE 비용은 증가

 

파생컬럼 추가

   - 계산을 통해 얻어지는 결과 값을 테이블에 컬럼으로 저장

 

이력테이블 컬럼 추가

   - 이력 테이블에 기능성 컬럼 추가 (최신 여부, 시작일 / 종료일 등)


관계 반 정규화

중복관계 추가

   - 데이터 처리를 위해 여러 경로를 거쳐야 할 경우 관계를 중복시킴으로써 성능을 개선


파티셔닝 (Partitioning)

   - 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 데이터 엑세스 성능 향상 및 데이터 관리방법 개선을 하는 기법   - 하나의 테이블에 많은 양의 데이터가 저장이 되면 인덱스를 추가하고, 테이블을 몇개로 쪼개도 성능이 저하가 되는 경우 용이.

 

반정규화 대상에 대한 다른 방법으로 처리

   - 지나치게 많은 join으로 데이터를 조회하는 작업이 어려울 땐? ---> VIEW를 사용   - 대량의 데이터 처리 / 부분처리에 의해 저하되는 성능? ---> 클러스트링 적용 / 인덱스 조정   - 대량의 데이터는 Primary Key의 성격에 따라 부분적인 테이블로 분리할 수 있다. 즉, Partitioning 기법이 적용되어 성능저하 방지 가능.


오늘의 한 마디 : SQL은 하면 할 수록 재밌는 거 같다.

728x90

'Data Base > Daily_study' 카테고리의 다른 글

SQL study [21.08.17]  (0) 2021.08.18
SQL study [21.08.16]  (0) 2021.08.17
SQL study [21.08.14]  (0) 2021.08.15
SQL study [21.08.13]  (0) 2021.08.14
SQL study [21.08.12]  (0) 2021.08.13

댓글