본문 바로가기
Oracle(DB관련)

페이징 처리 sql

by xfree302 2009. 10. 29.
반응형

오라클의 경우 MYSQL과 같이 LIMIT 기능을 제공하지 않아 페이징 처리하는데 어려움이 따른다.

일반적으로 사람들이 가장 많이 사용하는 방법을 먼저 소개하도록 하겠다.

이 방법은 일방적인 데이터의 양에서는상당히 괜찮은 속도를 보장해준다.
 
그러나 대용량의 경우 부족한 성능을 보다.


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

01.SELECT * FROM (
02.     SELECT A.*, 
03.                 ROWNUM AS RNUM,
04.                 FLOOR((ROWNUM-1)/{디스플레이수}+1) AS PAGE,
05.                 COUNT(*) OVER() AS TOTCNT FROM (
06.          {검색쿼리 - 정렬이 필요할 경우 정렬조건 포함}
07.    ) A
08.) WHERE PAGE = {페이지번호};
09.  
10.OR
11.  
12.SELECT * FROM (
13.     SELECT A.*, 
14.                 ROWNUM AS RNUM,
15.                 COUNT(*) OVER() AS TOTCNT FROM (
16.          {검색쿼리 - 정렬이 필요할 경우 정렬조건 포함}
17.    ) A
18.) WHERE RNUM > {범위부터} AND RNUM <= {범위까지};



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

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


출처 : http://webprogrammer.tistory.com
반응형

'Oracle(DB관련)' 카테고리의 다른 글

순서정하기 rank()  (0) 2009.11.04
sys_connect_by_path row데이터를 column데이터로  (0) 2009.11.04
merge into 있으면 update, 없으면 insert  (0) 2009.11.03
join update  (0) 2009.10.28
달력 query  (0) 2009.07.17