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

h2.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 관계 다시 성립하도록






h2.2. 부모, 자식 테이블 통합

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

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


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






h2.2. M:M 관계의 테이블

  • 배경: from 절에 In line view 를 쓰는데 그게 분석함수로 Max(min) 값만 가져오는 쿼리
  • 개선 방안
    순번컬럼을 999로 입력한다
    Flag 컬럼을 둔다
    선분이력 모델을 체택한다
    최종 데이터만 주로 조회 한다면 마스터 테이블을 이력 테이블과 별도로 관리한다
  • 한계: 새로운 이력 쌓일 때 마다 기존 값 갱신 필요





    \

결론

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