[SQLP실기풀이]4장 조인튜닝(4)-고급조인기법 58번

Yu River·2022년 6월 26일
0

SQLP실기연습

목록 보기
30/44

문제 링크 : https://velog.io/@yooha9621/SQLP실기문제-날짜58번

1) 쿼리 튜닝

1. 장비 테이블 액세스

  • 조회조건 중 장비구분코드 = 'A001'이 적용될 수 있도록 선두컬럼이 장비구분코드인 장비_X1 인덱스를 사용한다.
  • 드라이빙 테이블로 들어간다.

2. 상태변경이력 테이블 액세스

  • 조회 조건으로 '장비번호'를 선두로 하고 상태변경이력_PK 인덱스를 사용해 NL조인하여 변경일자가 장비 테이블의 최종상태변경일자보다 더 먼저인 변경일자 + 변경 순번의 가장 최근 1건을 뽑는다.
    • 이 때 정렬이 무너지지 않도록 처리해야한다.

2) 튜닝한 SQL문

SELECT P.장비번호 , P.장비명 , P.최종상태코드 , A.상태코드 AS 직전상태코드 ,
A.변경일자 AS 직전변경일자 , A.변경순번 AS 직전변경순번
FROM 장비 P , 상태변경이력 A
WHERE P.장비구분코드 = 'A001'
AND A.장비번호 = P.장비번호
AND (A.변경일자 , A.변경순번) =
(SELECT 변경일자 , 변경순번
FROM (
  SELECT 변경일자 , 변경순번
  FROM 상태변경이력
  WHERE 변경일자 < P.최종상태변경일자
  AND 장비번호 = P.장비번호
  ORDER BY 변경일자 DESC , 변경순번 DESC)
WHERE ROWNUM <= 1)
ORDER BY P.장비번호

🍎 정리

  • 장비구분코드가 'A0001' 인 장비 데이터를 드라이빙 테이블로 놓고 장비번호로 상태변경이력 테이블과 조인하는데 조인하는 데이터의 변경일자가 장비 데이터의 최종 상태 변경 일자보다 작으면서 변경일자와 변경순번이 가장 최근인 1건만 가지고 오기 위해 다중 컬럼 비교를 통해 다시 상태변경이력을 조회하도록 한다.
profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글