순서대로 정렬 후 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로 수정하였습니다.
'Lecture > SQL & Oracle' 카테고리의 다른 글
[SQL 기본만 알아도 할껀 다한다.] Group by 에 대해 (1) | 2013.07.11 |
---|---|
[SQL 기본만 알아도 할껀 다한다.] 집계함수에 대해 (0) | 2013.07.09 |
[SQL 기본만 알아도 할껀 다한다.] 날짜 함수 (Date Functions) (3) | 2012.07.16 |
[SQL 기본만 알아도 할껀 다한다.]숫자 함수(Number Functions) (1) | 2012.07.13 |
[SQL 기본만 알아도 할껀 다한다.] 문자 처리 함수 (Character-Manipulation Functions) (1) | 2012.07.11 |