오라클 romnum 개념이 너무 헛갈 립니다. ㅜ 0 2 867

by 초보개발자 [SQL Query] [2014.09.29 15:45:07]


 

게시글  최근 5개 글뽑기 쿼리를 짜다가 너무 궁금해서 여쭈어 봅니다.

보통 저는

SELECT ROWNUM, A.*
FROM (
    select * from test  order by date desc
  )A
WHERE ROWNUM  <= 5;

이런씩으로 쿼리를 짰었는데요

 

SELECT ROWNUM,a.*

FROM test a

WHERE  ROWNUM <=5 ORDER BY  date DESC;

이런 씩으로 짜닌깐 똑같은 결과가 나오더라구요.. 머리에 혼란이 옵니다. 

ORDER BY 가 지금  WHERE 절보다 먼저 실행이 됐다는 건데 도저히 이해를  할 수 가 없습니다.

이게 맞는 문법 인지요? 쉬원한 답변좀 부탁드릴께요 ㅜ  답답합니다..

 

 

 

 


 

 


 

by 마농 [2014.09.29 16:04:36]

Order By 가 Where 절보다 먼저 수행된것이 아닙니다.
Order By 가 수행되지 않은 것입니다.
실행계획을 확인해 보세요.
정렬키에 해당하는 인덱스가 존재하면
정렬 대신 인덱스를 이용해 자료를 추출합니다.
인덱스는 정렬이 된 상태이므로 별도 정렬은 필요 없죠.
맞는 문법이냐구요? 엄밀히 말하면 틀린거죠...
2번 방식은 인덱스 존재 여부에 따라 결과가 달라질 수 있으니 말이죠.
1번 방식은 인덱스 존재여부에 상관 없이 정확한 결과를 도출합니다.
 - 인덱스가 없으면 정렬을 수행하고
 - 인덱스가 있으면 인덱스 스캔을 통해 정렬을 하지 않습니다.


by 초보개발자 [2014.09.29 16:30:33]

아 감사합니다  이해가 되네요 ^^
 

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