order by, group by 튜닝 질문 드립니다 0 6 3,237

by 몽몽이 [DB 기타] [2024.02.20 15:44:37]


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를 타는걸로 알고있습니다.

by 마농 [2024.02.20 16:18:47]

선행 컬럼인 고객번호에 대한 검색조건이 없는데요?


by 몽몽이 [2024.02.20 16:22:07]

order by 처럼 group by 고객번호 이렇게만 해도 되는줄 알았는데 group by는 아닌거군요 ㅠㅠ....

공부하다보니 이것저것 짬뽕돼서 헷갈리네요 감사합니다.


by 모래가흙흙 [2024.02.20 17:09:15]

강제로 "거래_x2" 힌트를 주면 sort생략과 동시에 타긴 할거에요. 다만, index full scan으로 모두 읽게되면서 오히려 더 비효율일 가능성이 높습니다.


by 몽몽이 [2024.02.21 10:01:54]

다시 책을 봤는데 GROUP BY NOSORT로 변환을 해준다고 하더라구요.

근데 어느게 더 효율적인지 모르겠습니다 ㅠㅠ

그럼 위에 X2는 변환은 해주지만 전체 인덱스를 읽어야하니 X1이 유리하다고 봤겠군요..?!


by 마농 [2024.02.21 00:15:42]

전체 맥락을 봐야 합니다.
일부 구문과 일부 설명만 발췌해서 보는 것은 무의미합니다.
해당 설명을 하기 위한 전제 조건들이 있을 것입니다.
예를 들어 "a 는 b 와 c 가 잇고 d 는 없으며, e 라는 가정하에 f 이다." 라는 설명에서
일부만 발췌하여 "a 는 f 이다." 라는 결론을 내는 것은 위험합니다.


by 몽몽이 [2024.02.21 10:03:46]

튜닝하려면 전체를 봐야하는데 넘 어렵네요...

천천히 공부해보겠습니다 :)

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입