반응형
오라클의 경우 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 |