Oracle 페이지 번호 매기기 베스트 프랙티스
문제:행의 한 페이지 결과 집합과 총 행 수를 반환하는 저장 프로시저가 필요합니다.
솔루션 A: 2개의 저장 프로시저를 만듭니다.하나는 1페이지의 결과 세트를 반환하고 다른 하나는 스칼라(총 행)를 반환합니다.설명 계획에 따르면 첫 번째 스프로치의 가격은 9이고 두 번째 스프로치의 가격은 3입니다.
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY D.ID DESC ) AS RowNum, ...
) AS PageResult
WHERE RowNum >= @from
AND RowNum < @to
ORDER BY RowNum
SELECT COUNT(*)
FROM ...
B:는 모든 , B: 1을 더한다.TotalRows
결과 세트의 모든 행에 번호를 지정합니다.이 솔루션은 해킹적인 느낌이 들지만 비용이 9달러이고 1스프로치밖에 들지 않기 때문에 이 솔루션을 사용하고 싶습니다.
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY D.ID DESC ) RowNum, COUNT(*) OVER () TotalRows,
WHERE RowNum >= from
AND RowNum < to
ORDER BY RowNum;
Oracle 페이지 번호 부여에 대한 모범 사례가 있습니까?전술한 솔루션 중 실제로 가장 많이 사용되는 솔루션은 무엇입니까?그들 중 누구라도 명백히 잘못되었다고 생각되는 사람이 있나요?내 DB는 비교적 작은 크기(10GB 미만)로 유지됩니다.
Oracle 11g과 최신 ODP를 사용하고 있습니다.VS2010 SP1 및 Entity Framework 4.4를 갖춘 NET.EF 4.4 내에서 작동하려면 최종 솔루션이 필요합니다.일반적으로 페이지 번호부여를 위한 더 나은 방법이 있을 거라고 확신하지만 EF와 협력해야 합니다.
( 「」 「 」 「 」 「 。ROW_NUMBER() OVER ...
를 사용하면 에 다른 함수를 이 거의 를 사용하면 동일한 파티션에 다른 분석 함수를 추가하면 쿼리에 비용이 거의 들지 않습니다.
페이지 매기는 방법에는 , 그 중 , 이, 른, 른, 른, 그, 그, 그, 그, 그, 그, 그, 그, 그, 그, on, on, on, on, on, on, on, on, on, on, on, on, on, on, on, on,rownum
:
SELECT *
FROM (SELECT A.*, rownum rn
FROM (SELECT *
FROM your_table
ORDER BY col) A
WHERE rownum <= :Y)
WHERE rn >= :X
이 방법은 주문 열에 적절한 인덱스가 있는 경우 더 우수합니다.이 경우 두 개의 쿼리(총 행 수, 결과 값)를 사용하는 것이 더 효율적일 수 있습니다.
두 가지 방법 모두 적절하지만 일반적으로 행 수와 페이지 지정 세트를 모두 원하는 경우 행을 한 번만 쿼리하므로 분석을 사용하는 것이 더 효율적입니다.
다음과 같은 이점이 있습니다.
SELECT * FROM
( SELECT deptno, ename, sal, ROW_NUMBER() OVER (ORDER BY ename) Row_Num FROM emp)
WHERE Row_Num BETWEEN 5 and 10;
Oracle 12C를 할 수 .LIMIT
★★★★★★★★★★★★★★★★★」OFFSET
페이지 번호부여를 위해.
- 표가 해 보겠습니다.tab
가 있습니까?DATE
컬럼 " " " "dt
페이지 번호를 사용하여 내림차순으로 정렬합니다.
page_size:=5
select * from tab
order by dt desc
OFFSET nvl(page_no-1,1)*page_size ROWS FETCH NEXT page_size ROWS ONLY;
설명:
page_no=1 page_size=5
OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY
첫만 가져오기 - 5행만 가져오기
page_no=2 page_size=5
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY
- 5행 가져오기
기타 등등.
참조 페이지 -
https://oracle-base.com/articles/12c/row-limiting-clause-for-top-n-queries-12cr1#paging
SQL 코드를 깔끔하게 정리하는 방법은 다음과 같습니다.WITH
진술.
축소판 구현에서는 총 결과 수와 총 페이지 수도 표시됩니다.
예를들면
WITH SELECTION AS (
SELECT FIELDA, FIELDB, FIELDC FROM TABLE),
NUMBERED AS (
SELECT
ROW_NUMBER() OVER (ORDER BY FIELDA) RN,
SELECTION.*
FROM SELECTION)
SELECT
(SELECT COUNT(*) FROM NUMBERED) TOTAL_ROWS,
NUMBERED.*
FROM NUMBERED
WHERE
RN BETWEEN ((:page_size*:page_number)-:page_size+1) AND (:page_size*:page_number)
이 코드는 다음 두 개의 필드가 포함된 페이지 결과 세트를 제공합니다.
TOTAL_ROWS
의 전체 행과 함께SELECTION
RN
레코드의 행 번호
여기에는 2개의 파라미터가 필요합니다.:page_size
그리고.:page_number
자르다SELECTION
축소판
선택 항목이 이미 구현되었습니다.ROW_NUMBER()
들판
WITH SELECTION AS (
SELECT
ROW_NUMBER() OVER (ORDER BY FIELDA) RN,
FIELDA,
FIELDB,
FIELDC
FROM TABLE)
SELECT
:page_number PAGE_NUMBER,
CEIL((SELECT COUNT(*) FROM SELECTION ) / :page_size) TOTAL_PAGES,
:page_size PAGE_SIZE,
(SELECT COUNT(*) FROM SELECTION ) TOTAL_ROWS,
SELECTION.*
FROM SELECTION
WHERE
RN BETWEEN ((:page_size*:page_number)-:page_size+1) AND (:page_size*:page_number)
이것을 시험해 보세요.
select * from ( select * from "table" order by "column" desc ) where ROWNUM > 0 and ROWNUM <= 5;
나도 비슷한 문제에 직면했다.위의 모든 솔루션을 시도해 봤지만 이보다 더 나은 성능을 제공하는 솔루션은 없었습니다.수백만 장의 레코드가 있는 테이블이 있는데 20페이지 단위로 화면에 표시해야 합니다.저는 이 문제를 해결하기 위해 다음과 같이 했습니다.
- 테이블에 새 열 ROW_NUMBER를 추가합니다.
- 열을 기본 키로 만들거나 고유한 인덱스를 추가합니다.
- 인구 프로그램(내 경우 Informatica)을 사용하여 열을 로넘으로 채웁니다.
- between 문을 사용하여 테이블에서 레코드를 가져옵니다(ROW_NUMBER WHERE WHER_RANGE와 UPER_RANGE 사이의 테이블에서 선택).
이 메서드는 큰 테이블에서 무조건 페이지 페치를 수행해야 하는 경우에 효과적입니다.
죄송합니다. 이것은 정렬과 함께 작동합니다.
SELECT * FROM (SELECT ROWNUM rnum,a.* FROM (SELECT * FROM "tabla" order by "column" asc) a) WHERE rnum BETWEEN "firstrange" AND "lastrange";
언급URL : https://stackoverflow.com/questions/13738181/best-practice-for-pagination-in-oracle
'programing' 카테고리의 다른 글
Spring Boot Application 내부 구조 (0) | 2023.03.13 |
---|---|
다른 ng뷰에 데이터를 전달하고 컨트롤러 간에 데이터를 유지할 수 있는 우수한 설계 (0) | 2023.03.13 |
Wordpress admin이 css/js를 로드하지 않습니다. (0) | 2023.03.13 |
우체국에서 모든 json의 필드를 접을 수 있는 방법이 있나요? (0) | 2023.03.13 |
패키지 Import 방법.typeScript에 json이 있나요? (0) | 2023.03.13 |