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

Yu River·2022년 6월 26일
0

SQLP실기연습

목록 보기
28/44

문제 링크 : https://velog.io/@yooha9621/SQLP실기문제53번

1) 쿼리 튜닝

1.개통접수 테이블 액세스

-조회조건이 개통접수과 장애접수에 있으므로 해당 두 테이블을 드라이빙 테이블로 놓고 각각 UNION ALL로 조회하도록 한다.

  • 접수일자가 오늘인 조회조건이 있으므로 '접수일자'가 선두 컬럼이고 접수번호가 그 다음 컬럼인 인덱스를 생성한다.
    • 개통접수_X1 : 접수일자

2.장애접수 테이블 액세스

-조회조건이 개통접수과 장애접수에 있으므로 해당 두 테이블을 드라이빙 테이블로 놓고 각각 UNION ALL로 조회하도록 한다.

  • 접수일자가 오늘인 조회조건이 있으므로 '접수일자'가 선두 컬럼이고 접수번호가 그 다음 컬럼인 인덱스를 생성한다.
    • 장애접수_X1 : 접수일자

3.작업지시 테이블 액세스

  • 접수 번호로 NL 조인처리 되고 접수구분코드로 NL 조인 대상을 판별하므로 해당 인덱스를 생성한다.
    • 작업지시_X1 : 접수구분코드 + 접수번호

4.작업지시 테이블과의 조인

  • 각 테이블과 NL조인을 할 때 작업 구분 코드에 따라 각각 조인을 시도 후 UNION ALL 처리한다.

2) 튜닝한 SQL문

[인덱스 생성]
작업지시_X1 : 접수구분코드 + 접수번호
개통접수_X1 : 접수일자 + 접수번호
장애접수_X1 : 접수일자 + 접수번호

SELECT A.작업일련번호 , A.작업자ID , '개통' AS 작업구분, B.고객번호 , B.주소
  FROM 작업지시 A , 개통접수 B
  WHERE A.작업구분코드 = 'A'
  AND B.개통접수일시 >= TRUNC(SYSDATE)
  AND B.개통접수일시 < TRUNC(SYSDATE+1)
  AND A.접수번호 = B.개통접수번호
UNION ALL
SELECT A.작업일련번호 , A.작업자ID , '장애' AS 작업구분, B.고객번호 , B.주소
  FROM 작업지시 A , 장애접수 B
  WHERE A.작업구분코드 = 'B'
  AND B.장애접수일시 >= TRUNC(SYSDATE)
  AND B.장애접수일시 < TRUNC(SYSDATE+1)
  AND A.접수번호 = B.장애접수번호

🍎 정리

  • 방문 예정일자가 '오늘' 인 작업지시 데이터를 드라이빙 테이블로 놓고 작업구분코드에 따라 개통접수 테이블과 장애접수 테이블 각각 NL조인하여 UNION ALL 처리한다.
  • 날짜 비교는 방문예정일자 = TO_CHAR(sysdate , 'YYYYMMDD') 로 했다.

😥 헷갈렸던 부분

  • 개통접수일시 는 말그대로 연-월-일-시 까지 나와있는 DATE 형식으로 이를 통해
    '오늘'이라는 '일자'까지의 비교를 원하는 경우 다음과 같이 비교한다.
    • 개통접수일시 >= trunc(sysdate) and 개통접수일시 < trunc(sysdate+1)
profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글