카테고리 없음

대용량 데이터 목록 처리

gt1000 2014. 4. 23. 15:56

나중에 수정하자

 

전체 갯수와 목록 처리를 한번에
* pageNo : 현재 표시된 페이지 번호, 기본값 1
* pageRows : 한 페이지에 보여지는 로우 개수
SELECT P.*
FROM (
        SELECT T.* ,
             CEIL(ROWNUM / #{pageRows}) AS PAGE_NO ,
             COUNT(*) OVER() AS TOTAL_ROWS ,
             #{pageRows} AS PAGE_SIZE
      FROM (
              SELECT a, b, c
              FROM xxxx_table
              WHERE a = 'Y'
                    AND b = 'N'
              ORDER BY PRIORITY ASC, c DESC
      ) T
) P
WHERE PAGE_NO = #{pageNo}


쿼리를 2번 호출하는 방식
int startRownum = PageUtil.getStartRownum(pageNo, countPerPage);
int endRownum = PageUtil.getEndRownum(pageNo, countPerPage);
전체 카운트를 먼저 구한후 startRownum, endRownum을 프로그램에서 구한후
쿼리를 처리
SELECT *
FROM (
     SELECT C.*, ROWNUM AS rn
     FROM (
            SELECT a, b, c
            FROM t_httk_cafe_lecture A
            WHERE A.a = xxxx AND
               A.b = '0'
            ORDER BY c DESC, a DESC
     ) C
     WHERE ROWNUM <= #endRownum#
)
WHERE rn BETWEEN #startRownum# AND #endRownum#