[SQLP실기풀이]6장 고급SQL튜닝(4) 파티셔닝 25번

Yu River·2022년 7월 4일
0

SQLP실기연습

목록 보기
7/44

문제 링크 : https://velog.io/@yooha9621/SQLP실기문제-파티셔닝25번

1) 내가 생각한 튜닝 포인트🤔

  1. 기존 쿼리는 고객변경이력 테이블을 파티션으로 조회하지 못하고 있다.
    • 기존 쿼리는'최종 변경 일자'가 CHG_DT인 데이터를 조회하고자 한다.
    • 👉 '변경일자' 조회 조건을 인라인뷰 안에다가 추가해 해당되는 파티션만 읽을 수 있게 한다.

2) 튜닝한 쿼리

튜닝 전 쿼리

SQL > SELECT *
FROM (
  SELECT 고객번호 , MAX(변경일자) 변경일자 , MAX(변경구분코드)
  , KEEP (DENSE_RANK LAST ORDER BY 변경일자, 변경일련번호) 변경구분코드
  FROM 고객변경이력 CH
  WHERE EXISTS (
      SELECT 'X'
      FROM 고객 C
      WHERE 고객번호 = CH.고객번호
      AND 상태변경일자 〈= CH.변경일자
      AND 고객상태코드 = 'AI' )
  GROUP BY 고객번호
)
WHERE 변경일자 =: CHG_DT
AND 변경구분코드 = 'D1';

튜닝 후 쿼리

SQL > SELECT *
FROM (
  SELECT 고객번호 , MAX(변경일자) 변경일자 , MAX(변경구분코드)
  , KEEP (DENSE_RANK LAST ORDER BY 변경일자, 변경일련번호) 변경구분코드
  FROM 고객변경이력 CH
  WHERE EXISTS (
      SELECT 'X'
      FROM 고객 C
      WHERE 고객번호 = CH.고객번호
      AND 상태변경일자 〈= CH.변경일자
      AND 고객상태코드 = 'AI' )
  AND CH.변경일자 >= :CHG_DT
  GROUP BY 고객번호
)
WHERE 변경일자 =: CHG_DT
AND 변경구분코드 = 'D1';

🍎 정리

  • '변경일자' 조회 조건을 인라인뷰 안에다가 추가해 해당되는 파티션만 읽을 수 있게 한다.

👀 헷갈렸던 점

  • '변경일자' 조회 조건으로 파티션 테이블 조회를 하려면 조회될 데이터의 '변경일자'의 해당 월을 얼만큼 조회할지 정해야하는데 이 부분에서 정확한 해답이 바로 떠오르지 않았다.
    • 💡해답 : '최종 변경 일자'가 CHG_DT인 데이터를 조회하는 것이므로 어쨌든 변경일자가 CHG_DT보다 최근이면 된다.

profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글