오라클 소트튜닝 문의 0 2 3,024

by 몽몽이 [2024.01.18 16:24:12]


select * from(

select 거래일시, 체결건수, 체결수량, 거래대금

from 종목거래

WHERE 종목코드 = 'KR'

AND 거래지점코드 IN ('A','B')

AND 거래일시 >= TRUNC(SYSDATE)

ORDER BY 거래일시 DESC, 거래순번 DESC

)

where rownum <= 50

이 경우

인덱스를

종목코드 + 거래지점코드 + 거래일시 + 거래순번

거래지점코드 +종목코드 + 거래일시 + 거래순번

는 소트생략 불가능하다고 나오는데 왜 그런건가요?

by 마농 [2024.01.18 16:46:16]

정렬 기준과 인덱스 순서가 다르죠
- 정렬키 순서 : (종목코드), 거래일시, 거래순번
- 인덱스 순서 : (종목코드), 거래지점코드, 거래일시, 거래순번
종목코드는 이퀄조건에 따라 유일한 값이라
정렬 기준에는 없지만 영향이 없다고 볼 수 있습니다.
거래지점코드는 IN 조건으로 유일 값이 아닙니다.
정렬 기준에 중간 값이 빠져 있으니 인덱스만으로는 정렬 생략이 불가합니다.

예를 들면
조건을 만족하는 자료가 다음과 같이 4건이 있다고 가정했을 때
1. 인덱스 순서는 다음과 같고
- KR A 20240118 1
- KR A 20240118 2
- KR B 20240118 1
- KR B 20240118 2
2. 정렬 순서는 다음과 같습니다.(편의상 ASC 로 가정)
- KR A 20240118 1
- KR B 20240118 1
- KR A 20240118 2
- KR B 20240118 2
1과 2의 순서가 다르기 때문에 정렬 생략 불가


by 몽몽이 [2024.01.19 09:08:04]

이해 안됐다가 드뎌 이해했습니다 

감사합니다 마농님

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