데이터베이스 설계와 구축(개정판) (2009년)
컬럼수가 많은 테이블의 1:1 분리를 통한 성능 향상 0 0 43,330

by 구루비스터디 성능 데이터 모델링 [2019.08.11]


8.8 컬럼수가 많은 테이블의 1:1 분리를 통한 성능 향상

  • 때로는 한 테이블에 300개 이상의 컬럼이 있는 경우가 있다. 이렇게 많은 컬럼은 로우 체이닝 과 로우 마이그레이션이 많아지게 되어 성능이 저하된다.


8.8.1 컬럼수가 많으므로 인해 발생하는 성능 저하

  • 다음 모델은 도서정보라고 하는 테이블로서, 컬럼 수가 아주 많다. 생략된 컬럼까지 합하면 대략 200개 라고 가정한다. 만약 하나의 로우의 길이가 10KB라고 하고, 블록은 2K단위로 쪼개져 있다고 가정한다. 또한 블록에 데이터가 모두 채워진다고 가정한다면 대략 하나의 로우는 5블록에 걸쳐 저장될 것이다. 이때 컬럼의 앞쪽에 위치한 발생 기관명, 수량, 중간에 위치한 공고일, 발행일에 대항 정보를 가져오려면 물리적으로 컬럼값이 블록에 넓게 산재되어 있어 디스크 I/O가 많이 일어난다.

  • 200개의 컬럼을 동시에 저회하여 화면에 보여준느 경우는 드물것이다. 만약 200개의 컬럼이 가지고 있는 값을 모두 한 화면에 보여주기 위해서는 화면을 몇번 스크롤하면서 보여야 한다.
  • 이렇게 많은 컬럼을 가지고 있는 테이블에 대해서는 트랜잭션이 발생될때 어떤 컬럼에 대해 집중적으로 발생하는지 분석하여 테이블을 쪼개면 디스크 I/O가 감소하게 되는 성능이 개선된다.

  • 도서정보 테이블에는 전자출판 유형에 대한 트랜잭션이 독립적으로 발생되는 경우가 많이 있고, 대체제품에 대한 유형의 트랜잭션이 독립적으로 발생되는 경우가 많아 1:1관계로 분리하였다.
  • 분리된 테이블은 디스크에 적힌 커럼이저장되므로 로우 마이그레이션과 로우 체이닝이 많이 줄어들것이다.
  • 그림 8-29와 같이 발행기관명, 수량, 중간에 위치한 공고일, 발행일을 가져오는 동일한 SQL구문에 대해서도 디스크 I/O가 줄어들어 성능이 개선된다.

"구루비 데이터베이스 스터디모임" 에서 2009년에 "데이터베이스 설계와 구축(개정판)" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/4254

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입