오라클 성능 고도화 원리와 해법 II (2012년)
데이터 모델 측면에서의 검토 0 0 99,999+

by 구루비스터디 소트튜닝 [2018.04.01]


  1. 소트 튜닝 방안1 - 데이터 모델 검토
    1. M:M 관계의 테이블
    2. 부모, 자식 테이블 통합
    3. M:M 관계의 테이블


소트 튜닝 방안1 - 데이터 모델 검토

M:M 관계의 테이블


  • 배경: 논리적으로는 1:M 관계의 테이블이지만, 과거 예외적인 일부 데이터 때문에 M:M 관계 성립
  • 사용 조건: M:M 테이블 조인해서 주로 사용

SQL> select a.상품ID, a.과금액, b.수납액, b.수납일시
      from (select 고객ID, 상품ID, 과금연월, sum(과금액) 과금액
             from 과금
             where 과금연월 = :b1 and 고객ID = :b2
            group by 고객ID, 상품ID, 과금연월) a,
     수납 b
     .
     .

  • 소트 발생 원인: 서로 조인할 때 M 테이블을 group by 해서 1로 만든 후 1:M 조인 => Sort 발생
  • 개선 방안: 예외 데이터 정제 후 1:M 관계 다시 성립하도록


부모, 자식 테이블 통합


  • 배경: 부모 테이블이 PK 외에 별다른 데이터가 없어서 그냥 자식 테이블에 통합, 부모 테이블 데이터는 중복해서 따라붙음
  • 사용 조건: 부모 테이블 구조의 데이터 조회 빈번

select 과금.고객ID, 과금.상품ID, 과금.과금액, 가입상품.가입일시
from 과금,
     (select 고객ID, 상품ID, min(가입일시) 가입일시
      from 고객별 상품라인
      group by 고객ID, 상품ID) 가입상품
where
.
.
.


  • 소트 발생 원인: 중복 제거 위해 Group by 사용
  • 개선 방안: 저렇게 하지 말자


M:M 관계의 테이블

  • 배경: from 절에 In line view 를 쓰는데 그게 분석함수로 Max(min) 값만 가져오는 쿼리


개선 방안
  • 순번컬럼을 999로 입력한다
  • Flag 컬럼을 둔다
  • 선분이력 모델을 체택한다
  • 최종 데이터만 주로 조회 한다면 마스터 테이블을 이력 테이블과 별도로 관리한다
  • 한계: 새로운 이력 쌓일 때 마다 기존 값 갱신 필요


결론
  • 가급적 불필요한 소트를 줄여야 하니까 그때그때 상황에 맞게 개선점을 찾아라


"구루비 데이터베이스 스터디모임" 에서 2012년에 "오라클 성능 고도화 원리와 해법 II " 도서를 스터디하면서 정리한 내용 입니다.

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

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

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

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