데이터베이스 구조와 성능
슈퍼/서브타입 데이터 모델
- 최근 데이터 모델링을 할 때 자주 쓰이는 모델링 방법.
- 데이터의 특징을 공통과 차이점의 특징을 고려하여 효과적으로 표현할 수 있기 때문.
- 공통의 부분을 슈퍼타입으로 모델링하고 공통으로부터 상속받아 다른 엔터티와 차이가 있는 속성에 대해서는 별도의 서브엔터티로 구분하여 업무의 모습을 정확하게 표현하면서 물리적인 데이터모델로 변환을 할 때 선택의 폭을 넓힐 수 있는 장점이 있다.
- 논리적인 데이터 모델에서 이용되는 형태이고 분석단계에서 많이 쓰이는 모델이다.
슈퍼/서브타입에 대한 변환을 잘못하면 성능이 저하되는 이유
1) 트랜잭션은 항상 일괄로 처리하는데 테이블은 개별로 유지되어 Union연산에 의해 성능이 저하될 수 있다.
2) 트랜잭션은 항상 서브타입 개별로 처리하는데 테이블은 하나로 통합되어 있어 불필요하게 많은 양의 데이터가 직약되어 있어 성능이 저하되는 경우가 있다.
3) 트랜잭션은 항상 슈퍼 + 서브 타입을 공통으로 처리하는데 개별로 유지되어 있거나 하나의 테이블로 집약되어 있어 성능이 저하되는 경우가 있다.
그렇다면 위의 그림에서 3가지로 나뉠수 있다 했는데...그 기준은?!
- 데이터 양과 해당 테이블에 발생되는 트랜잭션의 유형에 따라 결정됩니다.
Therefore . 어떤 유형의 트랜잭션이 발생하는지 파악해야 한다.
그럼 변환 기술 3가지에 대해 파악해보자.
1) 개별로 발생되는 트랜잭션에 대해서는 개별테이블로 구성
2) 슈퍼 + 서브타입에 대해 발생되는 트랜잭션에 대해서는 슈퍼 + 서브 타입 테이블로 구성
3) 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성
슈퍼/서브타입 데이터 모델의 변환 타입 비교
구분 |
One to One Type |
Plus Type |
Single Type |
특징 |
개별 테이블 유지 |
슈퍼 + 서브 타입 테이블 |
하나의 테이블 |
확장성 |
우수함 |
보통 |
나쁨 |
조인성 |
나쁨 |
나쁨 |
나쁨 |
I/O량의 성능 |
좋음 |
좋음 |
나쁨 |
관리용이성 |
좋지않음 |
좋지않음 |
좋음 |
트랜잭션 유형에 따른 선택 방법 |
개별 테이블로 접근이 많은 경우 선택 |
슈퍼 + 서브 형식으로 데이터를 처리하는 경우 선택 |
전체를 일괄적으로 처리하는 경우 선택 |
인덱스 특성을 고려한 PK/FK 데이터베이스 성능 향상
* 인덱스란?
- 데이터를 조회할 때 가장 효과적으로 처리될 수 있도록 접근경로를 제공하는 오브젝트이다.
★ 테이블에 발생되는 트랜잭션의 조회 패턴에 따라 PK/FK 칼럼의 순서를 조정해야 함.
- PK는 해당 테이블의 데이터를 접근할 가장 빈번하게 사용되는 유일은 인덱스를 자동으로 생성
- FK는 데이터를 조회할 때 조인의 경로를 제공하는 역할을 수행함.
- 따라서 FK에 대해서는 반드시 인덱스를 생성하도록 하고 인덱스 칼럼의 순서도 조회의 조건을 고려하여 접근이 가장 효율적인 칼럼의 순서대로 인덱스를 생성하도록 주의해야 한다.
- PK의 순서를 인덱스 틀징에 맞게 고려하지 않고 바로 그대로 생성하게 되면, 테이블에 접근하는 트랜잭션의 특징에 효율적이지 않은 인덱스가 생성되어 있으므로 인덱스의 범위를 넓게 이용하거나 Full Scan을 유발하게 되어 성능이 저하된다.
'IT > SQLD(SQL개발자)' 카테고리의 다른 글
[SQLD] 관계형 데이터베이스 개요 (0) | 2019.06.22 |
---|---|
[SQLD] 분산 데이터베이스와 성능 (0) | 2019.06.21 |
[SQLD] 대량 데이터에 따른 성능 (0) | 2019.06.18 |
[SQLD] 반정규화와 성능 (0) | 2019.06.17 |
[SQLD] 정규화와 성능 (0) | 2019.06.16 |