기존의 내가 사용하던 게시판 리스트를 가져오는 쿼리는
SELECT * FROM (
SELECT ROWNUM rnum, num, id, name FROM MEMBERS
WHERE ROWNUM <= 10
) WHERE rnum > 0
위와 같은 쿼리를 날리면 오라클 기본 정렬을 기준으로 10건까지의 데이터를 가져오게 된다.
문제는 차후에 ORDER BY 가 필요한 경우다.
-- ORDER BY ID DESC, NAME ASC
위와 같은 정렬이 필요한경우 ROWNUM을 사용하면 ORDER BY는 무의미해지므로 다른 방법을 모색해야 했다.
(ROWNUM으로 10건을 가져온후 ORDER BY 하게된다..-_-;).
여러 방법이 있겠지만 내가 선택한 방법은 인덱스를 설정하는것이다
CREATE INDEX IDX_MEMBERS ON MEMBERS(ID DESC, NAME ASC)
위와 같이 만들어주자.
그럼 이제 저 인덱스를 쿼리문에서 힌트에 태워줘보자..-_-;;
SELECT * FROM (
SELECT /*+ INDEX_ASC(MEMBER IDX_MEMBERS) */
ROWNUM rnum, num, id, name FROM MEMBERS
WHERE (ID > 'TEST' OR ID < 'TEST')
AND ROWNUM = 10
) WHERE rnum > 0
WHERE 조건에 ID를 준것은 INDEX를 태우기 위함이다. ID를 주지 않거나 NAME를 주면 타지않는다..
달랑 힌트만 준다고 인덱스를 타진 않는다.
이러면 힌트를 타 정렬된것중에서 10건을 가져오게된다...오묘한 인덱스의 세계~...공부가 쵝오..-_-b
SELECT * FROM (
SELECT ROWNUM rnum, num, id, name FROM MEMBERS
WHERE ROWNUM <= 10
) WHERE rnum > 0
위와 같은 쿼리를 날리면 오라클 기본 정렬을 기준으로 10건까지의 데이터를 가져오게 된다.
문제는 차후에 ORDER BY 가 필요한 경우다.
-- ORDER BY ID DESC, NAME ASC
위와 같은 정렬이 필요한경우 ROWNUM을 사용하면 ORDER BY는 무의미해지므로 다른 방법을 모색해야 했다.
(ROWNUM으로 10건을 가져온후 ORDER BY 하게된다..-_-;).
여러 방법이 있겠지만 내가 선택한 방법은 인덱스를 설정하는것이다
CREATE INDEX IDX_MEMBERS ON MEMBERS(ID DESC, NAME ASC)
위와 같이 만들어주자.
그럼 이제 저 인덱스를 쿼리문에서 힌트에 태워줘보자..-_-;;
SELECT * FROM (
SELECT /*+ INDEX_ASC(MEMBER IDX_MEMBERS) */
ROWNUM rnum, num, id, name FROM MEMBERS
WHERE (ID > 'TEST' OR ID < 'TEST')
AND ROWNUM = 10
) WHERE rnum > 0
WHERE 조건에 ID를 준것은 INDEX를 태우기 위함이다. ID를 주지 않거나 NAME를 주면 타지않는다..
달랑 힌트만 준다고 인덱스를 타진 않는다.
이러면 힌트를 타 정렬된것중에서 10건을 가져오게된다...오묘한 인덱스의 세계~...공부가 쵝오..-_-b
'DataBase' 카테고리의 다른 글
TOAD 에서 방향키와 백스페이스키가 먹히지 않는경우 (0) | 2007.01.08 |
---|---|
오라클 데이타 타입이 DATE형일때 literal does not match format string 오류 (0) | 2006.12.21 |
Oracle 버전별 thin Driver (0) | 2006.07.27 |
[펌]Oracle OCI Driver와 Thin Driver 차이점 (0) | 2006.07.26 |
mySql과 Oracle 의 매칭함수~ (0) | 2006.06.26 |