[SQLP실기풀이]6장 고급SQL튜닝(1)-소트튜닝14번

Yu River·2022년 7월 2일
0

SQLP실기연습

목록 보기
40/44

문제 링크 : https://velog.io/@yooha9621/SQLP실기문제-소트튜닝14번

1) 기존 쿼리 분석

1. 상품 테이블 FULL SCAN
2. 계약_X1(지점ID) 인덱스 스캔
3. 두 테이블 해시 조인 후 전체 정렬
4. 정렬 후 부분범위처리

⭐️ 따라서 제대로 효율적인 부분범위 처리가 안 됨

⭐️ 튜닝 포인트

1.계약의 계약일시 기준으로 부분범위 처리 할 수 있도록 계약 테이블을 드라이빙 테이블로 두고 계약일시 DESC 를 차례로 읽을 수 있도록 계약_X1 인덱스를 재구성한다.

  • 계약_X1 : 지점ID + 계약일시
  1. 상품 테이블과 50건만 NL 조인하도록 하며 이 때 상품_PK 인덱스를 활용할 수 있도록 한다.

2) 쿼리 튜닝

1.계약 테이블 액세스

  • 계약일시 기준으로 부분범위 처리 할 수 있도록 계약_X1 인덱스를 재구성하여 이를 스캔하도록 한다.
    • 계약_X1 : 지점ID + 계약일시 인덱스 재구성

2.계약 테이블과 주문 테이블 부분범위처리 + NL 조인

3) 튜닝한 SQL문

[인덱스 재구성]
계약_X1 : 지점ID + 계약일시

SQL > SELECT *
FROM (
	SELECT /*+ LEADING(C) USE_NL(P) */
    C. 계약번호, C. 상품코드, P. 상품명, P.상품구분코드, C. 계약일시, C.계약금액
	FROM 계약 C, 상품 P
	WHERE C.지점 ID = :BRCH_ID
	AND P.상품코드 = C.상품코드
	ORDER BY C.계약일시 DESC ) X
WHERE ROWNUM <= 50

🍎 정리

  • 계약일시 DESC 정렬이 가능한 인덱스를 둔 계약 테이블을 드라이빙 테이블로 두어 상품 테이블과 부분범위 처리된 데이터량만큼 상품 코드 조건으로 NL 조인한다.
profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글