스칼라 서브쿼리 인덱스 안걸릴때 도움 부탁드립니다. 0 5 3,430

by 몽몽이 [2023.11.30 09:27:36]


SELECT A.ID, 

         ( SELECT SEQ FROM CODE B WHERE B.CODE = A.CODE),

         ( SELECT DS FROM CODE B WHERE B.CODE = A.CODE)

FROM SCH A

WHERE A.ID = 'A'

          A.ODR = '2'

ORDER BY SEQ, DS

스칼라 서브쿼리에서 뽑은 데이터로 ORDER BY하려고 하는데 실행계획보면 SORT가 자꾸 나오네요.

인덱스를 어떻게 걸어야할까요

by 마농 [2023.11.30 09:41:02]

SORT 가 나올 수 밖에 없는 쿼리 구조인데요?
스칼라서브쿼리를 조인으로 바꿀 수는 있습니다.
그렇다고 헤서 SORT 가 제거되지는 않습니다.
불필요한 SORT 는 제거 대상이지만, 필요한 SORT 를 무작정 제거할 수는 없습니다.
그리고, 올려 주신 쿼리는 완성형이 아니네요. 오류나겠네요.


by 몽몽이 [2023.11.30 09:49:53]

인터넷이 안돼서 머리로 생각하고 써서 죄송합니다.

저기서 CODE 테이블에 대한 인덱스를 설정해도 SORT를 제거할수가 없나요?

아우터조인으로 바꿔도 제거가 안되는데,  CODE, SEQ, DS에 대한 인덱스를 설정했는데 안되나보군요 ..

쿼리 시간을 잡는게 ORDER BY 쪽이여서 고민이네요


by 마농 [2023.11.30 10:10:20]

단순 소트 제거만 생각하시면 안됩니다.
전체 쿼리를 보고 비효율을 찾아야 합니다.
소트 제거만을 목적으로 한다면 억지로 가능은 하게 할 수도 있습니다.
다만, 그게 최선이 아닐 수 있습니다.


by 몽몽이 [2023.11.30 10:18:56]

그렇군요 감사합니다.

디비 튜닝책 몇번 봤는데 실전되니깐 머리가 안굴러가네요..ㅋㅋㅋ..

경력직인게 창피합니다.

감사합니다 마농님!


by 마농 [2023.11.30 11:04:08]

소트 제거만을 목적으로 한다면?
인덱스는 정렬 순서와 동일해야 하겠지요.
코드테이블의 정렬용 인덱스는 (SEQ, DS, CODE) 순서로 결합 인덱스
메인은 조인컬럼과 조건컬럼의 결합인덱스를 만들고 (CODE, ID, ODR) 조합. 순서는 상관 없을 듯.
아우터 조인을 꼭 해야 하는 상황이 아니라면 이너조인 시행
코드 > 메인 순서로 NL 조인 되도록 힌트 사용

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