[SQLP실기풀이]4장 조인튜닝(3)-스칼라서브쿼리 44번

Yu River·2022년 7월 31일
0

SQLP실기연습

목록 보기
18/44

문제 링크 : https://velog.io/@yooha9621/SQLP필기문제4장-조인튜닝3-스칼라서브쿼리

[내 답안]

  • 부분범위 처리를 할 수 있도록 고객 테이블에 가입일시를 선두컬럼으로 한 인덱스를 추가한다.
  • 거래 테이블과 원활한 NL조인이 가능하도록 거래 테이블에 고객번호가 선두컬럼이고 거래일시 조건까지 수직 액세스를 진행할 수 있도록 아래 거래_X2 인덱스를 추가했다.
  • 고객 테이블로 먼저 부분범위 처리를 하여 적은 양의 데이터를 조회하고 그 조회된 데이터로 하여금 거래 테이블을 NL조인 하도록 쿼리를 작성했다.

🍋 기출 포인트

  1. 부분범위 처리 + NL조인 +NO_MERGE 힌트 + PUSH_PRED 힌트
[인덱스 추가]
고객_X1 : 가입일시
거래_X2 : 고객번호 + 거래일시

select /*+ leading(c) use_nl(t) */ c.고객번호, c. 고객명 , t.평균거래금액
from 고객 c
	,(/*+ no_merge push_pred */ select round(avg(거래금액), 2) 평균거래금액
      from 거래
      where 거래일시 > trunc(sysdate, 'mm')
      ) t
where c.가입일시 >= trunc(add_months(sysdate, -1), 'mm')
and c.고객번호 = t.고객번호(+) ;

[다른 답안]

  • 부분범위 처리를 할 수 있도록 고객 테이블에 가입일시를 선두컬럼으로 한 인덱스를 추가한다.
  • 거래 테이블과 원활한 NL조인이 가능하도록 거래 테이블에 고객번호가 선두컬럼이고 거래일시 조건까지 수직 액세스를 진행할 수 있도록 아래 거래_X2 인덱스를 추가했다.
  • 고객 테이블로 먼저 부분범위 처리를 하여 적은 양의 데이터를 조회하고 그 조회된 데이터로 하여금 거래 테이블을 스칼라서브쿼리로 액세스하도록 쿼리를 작성했다.
    (캐시 사용이 가능해진다.)

🍋 기출 포인트

  1. 부분범위 처리 + 스칼라서브쿼리 +NO_UNNEST 힌트
[인덱스 추가]
고객_X1 : 가입일시
거래_X2 : 고객번호 + 거래일시

select c.고객번호, c. 고객명 
,(/*+ no_unnest */ select round(avg(거래금액), 2) 평균거래금액
      from 거래
      where 거래일시 > trunc(sysdate, 'mm')
      and 고객번호 = c.고객번호
      ) t
from 고객 c
where c.가입일시 >= trunc(add_months(sysdate, -1), 'mm')
;
profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글