sql 튜닝 Top N 쿼리 질문 (sort연산 왜 생략가능한지)

sql 튜닝 Top N 쿼리 질문 (sort연산 왜 생략가능한지)

작성일 2023.02.04댓글 1건
    게시물 수정 , 삭제는 로그인 필요

아래와 같은 쿼리문이 있을때
제 얕은 지식으로는 sort 생략이 왜 안되는지 잘 모르겠습니다
인덱스에 다 포함된 컬럼들이라 소트 생략이 될것같은데 왜 안되는지 여쭤볼게요 ㅜ

굵은표시는 제가 생각하는 생략가능한 이유가 될것같은 인덱스 포함 컬럼들입니다

- 인덱스목록
거래_PK : tradeDay + acc_no + tradeorder
거래_X01 : acc_no + tradeorder + payID

- 쿼리
select *
from (
select acc_no, tradeorder, price, amount, payID, platformID
from trade
where tradeDay =:ord_dt
order by acc_no, tradeorder, payID
)
where rownum<=50

다 적고나니 드는 생각이
order by 절의 payID가 다른 오더바이절의 컬럼들과 같은 인덱스가 아니라서 그런거같은데 맞나요?


#sql 튜닝 #sql 튜닝 강의 #sql 튜닝 책 #sql 튜닝 가이드 #sql 튜닝이란 #sql 튜닝 책 추천 #sql 튜닝의 시작 #sql 튜닝 예제 #sql 튜닝 기초 #sql 튜닝 권고자

profile_image 익명 작성일 -

sort가 생략되려면, 인덱스에 where절과 sort에 필요한 모든 컬럼이 하나의 인덱스에 있어야 가능합니다.

인덱스가 tree 구조로 순서대로 저장되는 자료구조라서 다시 sort할 필요가 없는 것을 이용한 것입니다.

생각하신대로, 조건이 들어가는 PK인덱스를 읽는 순서만으로는 순서보장이 안되고,

table에서 payID값까지 읽은 후에 다시 sort를 해야 하므로,

실행계획에서 sort operation이 생략되지 않는 것 입니다.

결론적으로, 현재 쿼리가 인덱스를 읽는 것만으로 sort 생략이 대체되려면,

tradeDay + acc_no + tradeorder + payID 구조인 인덱스가 있어야 가능합니다.

건승하시길~

컴퓨터 관련(IT) 용어 20개 알려주세요

... 되도록 빨리 올려주세요 추가질문,, 그리고 컴퓨터 용어랑 IT 용어랑 같나요??... 단, 고속의 데이터 처리가 가능한 CPU와 메모리를 요구하기 때문에 SDRAM과...

비주얼베이직 소스질문좀.

... 는 생략했어요. ? 항목이랑 값이 1:1이라서...... OPTION ( < query_hint > [ ,...n ] ) SQL Server의 문 처리를... 이러한 계획이 불가능할 경우 쿼리 최적화...