이건 진짜 몰랐다. 바로 답안을 확인했다.
WHERE 절에 기술된 조건에 의해 PK가 인덱스로 사용되고 있는데 처리한 데이터가 전체 데이터 중에서 15%를 초과해서 인덱스를 사용하는 것 자체가 속도가 저하된다 한다.
.. 15%를 초과하는지 어떻게 알았던 걸까.. 그냥 모를수밖에 없는 거 였는듯..
..바로 정답을 봤다..
GROUP BY COURSE_CODE, YEAR를 추가하는 서브쿼리를 넣었다.
/*+ NO_USE_HASH_AGGREGATION */.. aggreation시 해싱대신 소팅을 하게끔 할려면 쓴다고 한다.. 아직 잘 모르겠다.
답은 다음과 같았다.
SELECT /*+ FULL(EC_APPLY) */
COURSE_CODE, YEAR, SUM(DEPOSIT_AMOUNT) DEPOSIT_AMOUNT
FROM EC_APPLY
WHERE COURSE_CODE < 1000
AND YEAR BETWEEN '1999' AND '2002'
GROUP BY COURSE_CODE, YEAR
GROUP BY를 함수(DECODE) 사용 전에 먼저 적용시켜서 데이터를 추리는게 답이라 한다.
저 안의 정답(서브쿼리)를 INLINE VIEW라고 부른다고 함.
/*+FULL(EC_APPLY) */를 사용하면서 인덱스를 못쓰게 해버리는 것임. FULLSCAN!
그러면서 SUM을 먼저 하도록 GROUP BY COURSE_CODE, YEAR를 하는것임!
...이걸 실무에서 어떻게 판단해야할지...
침고! 10g 부터 GROUP BY의 매커니즘이 변경됨. Sorting에서 Hashing!! 으로 !!
'DB > SQL튜닝' 카테고리의 다른 글
업무에 바로 쓰는 SQL튜닝 입문 - 6교시(NESTED LOOPS 조인) - 문제 (2) | 2022.09.27 |
---|---|
업무에 바로 쓰는 SQL튜닝 입문 - 6교시(NESTED LOOPS 조인) (0) | 2022.09.26 |
업무에 바로 쓰는 SQL튜닝 입문 - 5교시(인덱스활용불가) (0) | 2022.09.26 |
업무에 바로 쓰는 SQL튜닝 입문 - 4교시(결합인덱스) - 문제 (0) | 2022.09.25 |
업무에 바로 쓰는 SQL튜닝 입문 - 4교시(결합인덱스) (0) | 2022.09.25 |