본문 바로가기

Java

페이징 처리 정리

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://blog.naver.com/PostView.nhn?blogId=kyaayaa&logNo=100127065619  --> 퍼온곳. 감사합니다.


 

'Java' 카테고리의 다른 글

java.lang.ClassCastException: java.math.BigDecimal  (0) 2012.01.19
Getting Started With Spring Security 3.1 VIDEO  (0) 2012.01.07
JSTL 정리  (2) 2012.01.03
JSTL 사용하기 위한 MAVEN REPO  (0) 2012.01.02
jd-gui  (0) 2011.12.13