CS (Computer Science)

[개발 공부 112일차] DB 개론 | 성능을 고려한 데이터 모델링

MOLLY_ 2024. 10. 3. 07:00
728x90

< 목차 >

0. TL;DR

1. 정규화, 반정규화

2. PK, FK 순서 조정

3. 컬럼 수가 많은 테이블의 1:1 분리

4. 대용량 테이블 파티셔닝*

5. 복잡한 모델의 단순화로 성능 향상

6. 일관성 있는 데이터 타입

7. 좋은 모델링이란

 

 

0. TL;DR

  1. 정규화, 반정규화 성능 향상
    : 데이터 무결성 및 관리에 대한 주의 필요
  2. PK, FK 순서 조정
    • [매우 중요] PK가 여러 속성으로 구성된 복합 식별자일 경우, PK 순서에 따라 성능 차이가 발생
    • FK로 사용되는 컬럼에 인덱스를 추가하여 성능 향상
  3. 일관성 있는 데이터 타입 설정
    : 동일한 속성의 컬럼에 데이터 타입이 맞지 않으면 DB는 같은 데이터라고 생각하지 않음
  4. 비즈니스 도메인을 잘 이해하는 것이 좋은 모델링을 도출함

 

 

1. 정규화, 반정규화

정규화가 잘 되어 있으면 입력, 수정, 삭제 성능이 향상된다.

반정규화를 많이 하면 조회 성능이 향상된다.

 

 

정규화, 반정규화 성능 향상

  • 반정규화를 통한 쿼리 단순화
  • 조인 비용 절약
  • 데이터 무결성 및 관리에 대한 주의 필요

 

 

2. PK, FK 순서 조정

  • [매우 중요] PK가 여러 속성으로 구성된 복합 식별자일 경우, PK 순서에 따라 성능 차이가 발생
  • PK 순서를 결정하는 기준은 인덱스 정렬 구조를 이해한 상태에서 인덱스를 효율적으로 이용하도록 PK 순서를 지정
  • PK로 만든 인덱스가 사용되지 않는다면 데이터 입력, 수정, 삭제 발생 시 불필요한 인덱스로 인해 성능 저하 발생
  • 데이터 조회 패턴에 따라 PK 순서 지정 고려

 

 

(1) PK 순서 조정으로 성능 향상

오른쪽 테이블의 성능이 더 좋음. OrderNum에서의 동일한 날짜가 많지 않을 것이기 때문

 

⇒ 복합 식별자일 경우, PK 순서에 따라 성능 차이 발생

 

 

(2) FK 인덱스 생성으로 성능 향상

FK 연쇄 삭제 제약이 걸려 있을 경우,

FK에 대한 인덱스가 없어서 전체 테이블 스캔으로 인한 성능 저하 발생

 

FK로 사용되는 컬럼에 인덱스를 추가하여 성능 향상

 

 

3. 컬럼 수가 많은 테이블의 1:1 분리

  • 컬럼이 많은 테이블은 로우 체이닝과 로우 마이그레이션*이 많아져, 성능 저하가 발생할 수 있음
  • 컬럼이 많은 테이블의 경우, 동시에 테이블의 데이터를 한 번에 다 보여주는 경우가 없음
    ⇒ 테이블을 분할해서 조회 범위 및 쓰기 시, 영역 분산

 

👾 마이그레이션 (Migration)

: DB, 시스템, 응용 프로그램의 데이터를 시스템에서 다른 시스템으로 이전하는 과정

 

 

4. 대용량 테이블 파티셔닝*

🍯 파티셔닝 (partitioning)

: 논리적인 데이터 element들을 다수의 entity로 쪼개는 행위

즉, 큰 table이나 index를 관리하기 쉬운, ‘partition이라는 작은 단위’로 물리적 분할을 하는 것

 

  • 테이블에 많은 양의 데이터가 저장될 경우, 파티셔닝을 적용하거나 PK에 의해 테이블을 분할하여 성능 향상
  • 파티셔닝은 컬럼을 나누는 것이 아닌, 파티션 키에 의해 데이터(row)를 나누는 개념
  • 파티션 키에 따라 분할되므로, 파티션 키 정의가 중요
  • 파티션 키를 한 번 설정하면 나중에 바꾸기 어려움 (모든 데이터를 변경해야 하는 대단히 큰 작업이 될 수 있기 때문)
    ⇒ 따라서, 설계할 때 매우 많은 부분을 고려해서 지정해야 함

 

 

5. 복잡한 모델의 단순화로 성능 향상

모델이 복잡한 경우, 수정사항을 발생했을 때 전체 수정으로 확대될 가능성이 있다.

 

업무 흐름에 따라 엔티티 타입, 관계, 속성을 정의해야 한다.

  • 화면 구성에 따라 데이터 모델을 설계해 복잡한 경우가 많음
  • 통합돼야 할 엔티티들이 흩어져 있거나 단절된 경우가 많음

 

 

6. 일관성 있는 데이터 타입

동일한 속성의 컬럼에 데이터 타입이 맞지 않으면 DB는 같은 데이터라고 생각하지 않는다.

 

형 변환이 발생할 경우, 성능 저하를 낳을 수 있다.

  • CHAR(10), VARCHAR(10)은 컬럼 타입이 달라서 인덱스 사용 불가
  • INT형에 문자 타입의 숫자를 조건으로 사용 시, 인덱스 사용 불가

⇒ 이렇듯 데이터 타입이 맞지 않는 경우에는 눈에 보이지 않는 ‘암시적 형 변환’이 생기니 주의해야 한다.

 

 

7. 좋은 모델링이란

데이터 모델링에 정답은 없지만 좋은 모델링은 있다.

 

  1. 정규화에 따라 잘 설계된 모델링은 확장 및 관리가 용이
  2. 성능 관점에서 비정규화를 통해 성능 향상
    : 모델링을 충실히 따른 후, 운영 환경에서 고려
  3. 데이터베이스에 대한 특성을 잘 알고 모델링에 반영
  4. 비즈니스 도메인을 잘 이해하는 것이 좋은 모델링을 도출함

 

 

728x90