본문 바로가기

자격증/SQLD

데이터베이스 구조와 성능

1. 슈퍼타입/서브타입 모델의 성능고려 방법


슈퍼/서브타입(Extended ER모델) 데이터 모델 개요


공통적인 부분을 분리(슈퍼타입)하여 서브 타입에서 슈퍼타입을 상속하는 형식의 모델링 기법


논리적 데이터 모델에서 이용되는 형태이므로, 물리적인 데이터 모델을 설계하는 단계에서는 일정한 기준에 의해 변환 됨


슈퍼/서브타입 데이터 모델의 변환


타입

  • One To One Type  : ( 1 : 1 관계로 연결 )

  • Plus Type : 슈퍼 + 서브 타입의 엔티티 여러개 생성

  • All In One Type : 슈퍼 + 서브타입들의 전체를 합친 형태 ( 컬럼수 대폭 증가 )



변환이 잘못되면 성능이 저하되는 이유

  1. 트랜잭션은 항상 일괄로 처리하는데 테이블은 개별로 유지되어 Union 연산에 의해 성능저하

  2. 트랜잭션은 서브타입을 개별로 처리하는데 테이블은 하나로 통합되어 있어 불필요한 많은 양의 데이터가 집약되어 성능 저하

  3. 트랜잭션은 항상 슈퍼+서브타입을 공통으로 처리하는데 개별로 유지되거나 하나의 테이블로 집약되어 있어 성능이 저하되는 경우가 있다.


슈퍼/서브 타입 데이터 모델의 변환 기술


  1. 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성
    슈퍼타입이 각 서브타입에 대해 기준역할을 하는 형식으로 사용될 때

  2. 슈퍼+서브에 대해 발생되는 트랜잭션에 대해서는 슈퍼+서브 테이블로 구성
    A, B 테이블이 있는 경우 A는 10만건, B는 1000만건이 있다, 특정 사용자가 A에 대한 데이터를 조회할 때 1번과 같은 개별 테이블로 구성하는 경우 10만건 정도의 데이터를 조회 하더라고 1010만건의 슈퍼타입 테이블을 조회하게 된다. 따라서 이경우 슈퍼+서브(Plus Type)으로 구성하는게 훨씬 효과적이다.

  3. 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성
    다양한 테이블을 항상 하나로 통합하여 처리한다면 Union 성능에 따른 SQL을 쓰므로 성능이 저하된다. 대용량이고 성능향상이 필요하다면 하나로 묶어서 만드는 것이 좋다.



슈퍼 서브타입 데이터 모델 변환타입 비교


구분

OneToOne Type

Plus Type

Single Type

특징

개별 테이블 유지

슈퍼+서브

하나의 테이블

확장성

우수함

보통

나쁨

조인성능

나쁨

보통

우수함

I/O량 성능

좋음

좋음

좋음

관리용이성

좋지않음

좋지않음

좋음

트랜잭셩 유형에 따른 선택방법

개별 테이블로 접근이 많은 경우 선택

슈퍼+서브 형식으로 데이터를 처리하는 경우 선택

전체를 일괄적으로 처리하는 경우 선택



2. 인덱스 특성을 고려한 PK/FK 데이터베이스 성능향상


FK에 대해서는 반드시 인덱스를 생성하도록하고 컬럼의 순서도 조회의 조건을 고려하여 접근이 가장 효율적인 칼럼 순서대로 인덱스를 생성하도록 주의하여야 함


PK칼럼의 순서를 조정하지 않으면 성능이 저하 이유

업무에 맞게 PK의 순서를 조정하지 않으면, 순서대로 PK가 만들어져 쓸대없는 FULL SCAN을 할 수 있다.


PK순서를 잘못 지정하여 성능이 저하되는 경우 - 간단한 오류

PK가 A, B, C 로 구성된 테이블에 B조건으로 검색할 경우 FULLSCAN이 일어나게 됨


PK순서를 잘못 지정하여 성능이 저하된 경우 - 복잡한 오류

PK가 A, B, C 로 구성된 테이블에 A B 조건으로 검색할 경우 인덱스를 타게되어 자칫 SQL 튜닝이 잘되었다고 생각하지만, 평균적은 PK의 RANGE 범위가 A > B 인 경우 B A C 형식으로 순서를 변경하면 좀 더 효율적인 탐색이 가능해진다.



3. 물리적인 테이블에 FK제약이 걸려있지 않을 경우 인덱스 미생성으로 성능저하



물리테이블에 FK 제약이 걸렸을 경우 : 반드시 INDEX 생성

물리테이블에 FK 제약이 걸리지 않았을 경우 : INDEX 생성을 기본원칙, 사용 빈도가 없을 경우 제거



'자격증 > SQLD' 카테고리의 다른 글

관계형 데이터베이스 개요  (0) 2016.09.09
분산 데이터베이스와 성능  (0) 2016.09.09
대량 데이터에 따른 성능  (0) 2016.09.09
반정규화와 성능  (0) 2016.09.09
성능 데이터 모델링의 개요  (0) 2016.09.02