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

Yu River·2022년 6월 26일
0

SQLP실기연습

목록 보기
32/44

문제 링크 : https://velog.io/@yooha9621/SQLP실기문제-선분이력60번
문제 출처 : SQLP 자격검정 핵심노트1 P.175

1) 쿼리 튜닝

1. 장비 테이블 액세스

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

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

  • 조회 조건으로 '장비번호'를 선두로 하고 상태변경이력_PK 인덱스를 사용해 장비 테이블의 최종상태변경일시보다 작은 유효종료일자를 가진 가장 최근 데이터를 찾아 NL조인한다.

2) 튜닝한 SQL문

SELECT P.장비번호 , P.장비명 , P.최종상태코드 , H.상태코드 AS 직전상태코드
, TO_CHAR(P.최종상태변경일시,'YYYYMMDD') AS 최종상태변경일자
, TO_CHAR(H.유효시작일시,'YYYYMMDD') AS 직전변경일자
FROM 장비 P , 상태변경이력 H
WHERE P.장비구분코드 = 'A001'
AND H.장비번호 = P.장비번호
AND H.유효시작일시 < P.최종상태변경일시
AND H.유효종료일시 >= P.최종상태변경일시 - 1/(60*60*24) --최종상태변경일시 1초전 보다는 크다.
ORDER BY P.장비번호

🍎 정리

  • 장비구분코드가 'A0001' 인 장비 데이터를 드라이빙 테이블로 놓고 장비번호로 상태변경이력 테이블과 조인하는데 조인하는 데이터의 유효시작일시가 최종 상태 변경일시'보다' 작으면서 유효종료일자가 가장 최근인 데이터를 NL조인한다.
    • 이 때 유효종료일자가 가장 최근인 데이터를 구하기 위해
      H.유효종료일시 >= P.최종상태변경일시 - 1/(606024) 조건절을 사용했다.

🍎 헷갈렸던 점

  • 해당 쿼리를 두번째 쿼리로 바꿀 수 있어야 했다.
SELECT *
FROM (SELECT 상태코드 , 유효종료일시
FROM 상태변경이력
AND 장비번호 = P.장비번호
AND P.최종상태변경일자 > 유효종료일자
ORDER BY 유효종료일자 DESC )
WHERE ROWNUM <= 1
  • 이 쿼리로 !!
SELECT 상태코드 , 유효종료일시
FROM 상태변경이력
AND 장비번호 = P.장비번호
AND 유효시작일시 < P.최종상태변경일시
AND 유효종료일시 >=  P.최종상태변경일시 - 1/(60*60*24) --최종상태변경일시 1분전보다는 크다.
profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글