DS's『 행복합시다 』

Carpe Programming/oracle

[오라클] 대용량 페이징 처리

nolite 2012. 1. 26. 16:18
반응형

1. 일반적인 오라클 페이징 처리

SELECT *
FROM (
SELECT A.*
, ROWNUM AS RNUM
, FLOOR((ROWNUM-1)/{디스플레이수}+1) AS PAGE
, COUNT(*) OVER() AS TOTCNT
FROM (
{검색쿼리 - 정렬이 필요할 경우 정렬조건 포함}
) A
)
WHERE PAGE = {페이지번호};
OR
SELECT *
FROM (
SELECT A.*
, ROWNUM AS RNUM
, COUNT(*) OVER() AS TOTCNT
FROM (
{검색쿼리 - 정렬이 필요할 경우 정렬조건 포함}
) A
)
WHERE RNUM > {범위부터}
AND RNUM <= {범위까지};


2. 오라클 대용량 페이징 처리

SELECT * FROM (
SELECT ROWNUM AS RNUM, A.* FROM (
{검색쿼리 - 정렬이 필요할 경우 정렬조건 포함}
) A WHERE ROWNUM <= {범위까지}
) WHERE RNUM > {범위부터};
OR
SELECT * FROM (
SELECT /*+ INDEX_ASC or INDEX_DESC(A {정렬조건 인덱스명}) */
ROWNUM AS RNUM, A.* FROM (
{검색쿼리 - 정렬이 필요한 경우 정렬조건을 포함하지 않고 ORACLE 힌트사용}
) A WHERE ROWNUM <= {범위까지}
) WHERE RNUM > {범위부터};




3. 인덱스를 이용한 페이징 처리
SELECT
IDX, TITLE, CONTENT
FROM ( SELECT /*+ INDEX(A IN_BOARDS)*/ ROWNUM AS RUNM, IDX,TITLE,CONTENT FROM BOADR A)
WHERE RNUM >=1 AND RNUM <=10

-> 위 정보에서 RNUM 값만 바꾸면 해당 페이징 쿼리 완성 :
-> RNUM 예시 : (((PAGENO - 1) * PAGESIZE) + 1)


4. ROW_NUMBER()를 이용한 페이징 처리
SELECT * FROM (
SELECT
A_TITLE
,ROW_NUMBER() OVER (ORDER BY A_IDX ASC) ROWNUMBER
FROM BOARD)
WHERE ROWNUMBER BETWEEN 100 AND 120

[출처] [ORACLE] 페이징 처리 sql|작성자 kyaayaa

http://tazz009.tistory.com/485 --> 퍼온곳. 감사합니다.

728x90
반응형

'Carpe Programming > oracle' 카테고리의 다른 글

[oracle] job  (0) 2012.02.03
[eclipse] Indigo - jQuery, JSDT  (0) 2012.01.26
[오라클] 파티셔닝 샘플  (0) 2012.01.25
오라클 정규식  (0) 2012.01.19
[oracle] TIMESTAMP 밀리세컨드 시간 계산하기  (0) 2012.01.19