본문 바로가기
Lecture/SQL & Oracle

[스크랩] 오라클 rownum 사용

by cusmaker 2013. 4. 21.
반응형

순서대로 정렬 후 15개를 가져오는 결과를 원하신 거면 둘다 틀렸는데요.

다음과 같이 해야 원하는 결과를 얻으실 수 있습니다.

 

1. id로 시작하는 index가 없는 경우

SELECT  ZZZ.*

FROM  (

    SELECT id,name,email,homepage,content,ip,password,input_date                         
        FROM   guestbook                                    
        ORDER BY id desc
       ) ZZZ      
WHERE   rownumBETWEEN 1 AND 15

빨간색처럼 해야 원하는 결과를 얻을 수 있습니다. 이 처리는 데이터가 1억건이라면 1억건을 sort후 처리하므로 대용량에서는 Time-out이 될 수 있습니다.

 

2. id로 시작하는 인덱스가 guestbook_idx1이라고 가정하여 존재하는 경우

SELECT ZZZ.*

FROM(

    SELECT /*+ index_desc(a guestbook_idx1) */

        id,name,email,homepage,content,ip,password,input_date, ROWNUM as rn
   FROM   guestbook a

    ) ZZZ

WHERE ZZZ.rn between 1 and 15

이렇게 하면 부분범위만 Access하므로 불필요한 Sort가 발생하지 않습니다.

 

두 경우 다 rownum은 숫자형이므로 불필요한 형변환을 유도하는 '1', '15'를 1, 15로 수정하였습니다.