sort 연산을 생략하기 위해 order by 컬럼을 인덱스에 명시하는 건 이해가 잘 됐습니다.
group by도 책에서 봤을 때 생략하기 위해 인덱스 컬럼 추가로 봤었는데
문제를 풀다보니 아닌거 같더라구요. 이 부분이 헷갈리는데 도움 부탁드립니다
(SELECT 고객번호, avg(거래금액) 평균거래
from 거래
where 거래일시 >= trunc(sysdate, 'mm')
group by 고객번호 )
거래_x1 : 거래일시
거래_x2 : 고객번호 + 거래일시
제가 공부한 내용은 group by에 해당된 컬럼 + 거래일시 이런식으로 인덱스 스캔할꺼라고 생각했는데
문제들을 보니 x1을 타더라구요
group by 는 인덱스 설정을 안해주는게 맞나요?
추가로 저기서 고객 테이블과 조인이 있을 경우 NO_UNNEST PUSH_PRED로 고객번호가 PUSH DOWN되면 거래_x2를 타는걸로 알고있습니다.
선행 컬럼인 고객번호에 대한 검색조건이 없는데요?
order by 처럼 group by 고객번호 이렇게만 해도 되는줄 알았는데 group by는 아닌거군요 ㅠㅠ....
공부하다보니 이것저것 짬뽕돼서 헷갈리네요 감사합니다.
강제로 "거래_x2" 힌트를 주면 sort생략과 동시에 타긴 할거에요. 다만, index full scan으로 모두 읽게되면서 오히려 더 비효율일 가능성이 높습니다.
다시 책을 봤는데 GROUP BY NOSORT로 변환을 해준다고 하더라구요.
근데 어느게 더 효율적인지 모르겠습니다 ㅠㅠ
그럼 위에 X2는 변환은 해주지만 전체 인덱스를 읽어야하니 X1이 유리하다고 봤겠군요..?!
전체 맥락을 봐야 합니다.
일부 구문과 일부 설명만 발췌해서 보는 것은 무의미합니다.
해당 설명을 하기 위한 전제 조건들이 있을 것입니다.
예를 들어 "a 는 b 와 c 가 잇고 d 는 없으며, e 라는 가정하에 f 이다." 라는 설명에서
일부만 발췌하여 "a 는 f 이다." 라는 결론을 내는 것은 위험합니다.
튜닝하려면 전체를 봐야하는데 넘 어렵네요...
천천히 공부해보겠습니다 :)