[SQL] 오라클과 페이징
SQL오라클과 페이징
내가 싶습니다 나는 오라클을 잘 알고로 아닙니다. 좀 250K 기록을 가지고 있고, 나는 그들에게 페이지 당 100을 표시합니다. 현재 나는 데이터 어댑터를 사용하여 데이터 세트 및 데이터 세트 및 저장된 프로 시저의 결과에 dataadapter.Fill (세트) 방법으로 만 기록의 모든 분기를 검색 한 저장 프로 시저가 있습니다. 내가 정수 값으로 "페이지 번호"와 "페이지 당 레코드 수"가 있다면 내가 다시 그냥 특정 섹션을 얻을 수있는 가장 좋은 방법이 될 것입니다 무엇을 매개 변수로 전달할 수 있습니다. 내가 선택 문에서, 페이지 수와 같은 페이지 번호로 10, 120을 전달하면 말, 그것은 나에게 그와 같은 1,200번째을 통해 1천8백80번째, 또는 무언가를 줄 것이다, 내 머리에 내 수학이 꺼져있을 수 있습니다.
그때 나는 멋진해야한다, 내가 바로 SQL 측에 그것을 얻을 수있는 경우 즉, 중요하지 않아 생각의 C #과 .NET에서이 일을하고 있습니다.
업데이트 : 브라이언의 제안을 사용할 수 있었고, 그것은 큰 노력하고 있습니다. 나는 몇 가지 최적화 작업 할 싶지만 페이지가 4 ~ 5 초보다는 분에오고, 내 페이징 제어 나의 새로운 저장 발동 매우 잘 통합 할 수 있었다.
해결법
-
==============================
1.이런 식으로 뭔가 작업을해야합니다 : 프랑스어 보우마의 블로그에서
이런 식으로 뭔가 작업을해야합니다 : 프랑스어 보우마의 블로그에서
SELECT * FROM ( SELECT a.*, rownum r__ FROM ( SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%' ORDER BY OrderDate DESC, ShippingDate DESC ) a WHERE rownum < ((pageNumber * pageSize) + 1 ) ) WHERE r__ >= (((pageNumber-1) * pageSize) + 1)
-
==============================
2.페이지 매김하고 매우 유용한 분석 기능에 톰에게 문의하십시오.
페이지 매김하고 매우 유용한 분석 기능에 톰에게 문의하십시오.
이는 해당 페이지에서 발췌 한 것입니다 :
select * from ( select /*+ first_rows(25) */ object_id,object_name, row_number() over (order by object_id) rn from all_objects) where rn between :n and :m order by rn;
-
==============================
3.보다 현대적인 솔루션을 찾는 사람들을위한 완전성의 관심에서, 오라클 12C 더 나은 페이징과 최고의 핸들링을 포함한 몇 가지 새로운 기능이 있습니다.
보다 현대적인 솔루션을 찾는 사람들을위한 완전성의 관심에서, 오라클 12C 더 나은 페이징과 최고의 핸들링을 포함한 몇 가지 새로운 기능이 있습니다.
페이징
페이징은 다음과 같습니다 :
SELECT * FROM user ORDER BY first_name OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY;
상위 N 레코드
상단을 얻는 것은이 같은 모습을 기록한다 :
SELECT * FROM user ORDER BY first_name FETCH FIRST 5 ROWS ONLY
공지 사항 모두 위의 쿼리의 예는 ORDER BY 절을하는 방법. 새로운 명령은 다음을 존중하고 정렬 된 데이터에서 실행됩니다.
나는 FETCH 또는 오프셋에 대한 좋은 오라클 참조 페이지를 찾을 수 없습니다하지만이 페이지는 이러한 새로운 기능의 훌륭한 개요를 가지고있다.
공연
아래의 코멘트에 밖으로 @wweicker 점으로, 성능은 12C의 새로운 구문 문제입니다. 오라클은 이후 개선 된 경우 나 시험에 18C의 사본을 가지고 있지 않았다.
흥미롭게도, 내 실제 결과는 약간 내 테이블에 새로운 방법 (113,000,000 + 행)에 쿼리를 실행 한 첫 번째 시간을 빨리만큼 반환 된 :
@wweicker가 언급 한 바와 같이 그러나이 계획 외모 새로운 방법에 대한 훨씬 더 설명 :
새로운 구문은 전체 비용이었다 내 컬럼에 인덱스의 전체 검사를 일으켰습니다. 인덱싱되지 않은 데이터를 제한 할 때 기회는 상황이 더 악화.
하자의 이전 데이터 세트의 단일 인덱싱되지 않은 열을 포함하여 보라 :
요약 :주의 사용 오라클이 처리를 개선 할 때까지. 당신이 작업에 대한 색인이있는 경우, 아마 당신은 새로운 방법을 사용하여 멀리 얻을 수 있습니다.
다행스럽게도 필자는 곧 놀 18C의 사본을해야하고 업데이트 할 수 있습니다
-
==============================
4.그냥 답변과 의견을 요약하고 싶다. 페이지 매김을하는 방법에는 여러 가지가 있습니다.
그냥 답변과 의견을 요약하고 싶다. 페이지 매김을하는 방법에는 여러 가지가 있습니다.
오라클 12C 이전에 더 그래서 @jasonk이 제안 백서에서 살펴보고, 기능을 FETCH / 오프셋되지 않았다있다. 내가 장점과 단점에 대한 자세한 설명과 다른 방법에 대해 발견 된 가장 완벽한 기사입니다. 나는 그것을하지 않습니다 그래서, 여기에 복사 - 붙여 상당한 시간이 걸릴 것입니다.
Oracle 및 다른 데이터베이스 매김 몇 가지 일반적인주의 사항을 설명 jooq 제작자에서 좋은 기사가있다. jooq의 블로그 게시물
우리는 오프셋 새가 오라클 12C 이후 좋은 소식 / 기능을 가져옵니다. OracleMagazine의 12C 새로운 기능을 제공합니다. "최고-N 쿼리 및 페이지 매김"을 참조하십시오
다음 문을 발행하여 오라클 버전을 확인할 수 있습니다
SELECT * FROM V$VERSION
-
==============================
5.다음을 시도해보십시오
다음을 시도해보십시오
SELECT * FROM (SELECT FIELDA, FIELDB, FIELDC, ROW_NUMBER() OVER (ORDER BY FIELDC) R FROM TABLE_NAME WHERE FIELDA = 10 ) WHERE R >= 10 AND R <= 15;
비아 [tecnicume]
from https://stackoverflow.com/questions/241622/paging-with-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL 열 이름을 처리하는 것을 SQL 키워드처럼? (0) | 2020.03.14 |
---|---|
[SQL] 합니까 PostgreSQL을 지원 "악센트를 구분"정렬? (0) | 2020.03.14 |
[SQL] SQL / MySQL은 - 별개의 / UNIQUE를 선택하지만, 모든 열을 반환? (0) | 2020.03.14 |
[SQL] SQL Server 테이블에서 n은 임의의 행을 선택 (0) | 2020.03.14 |
[SQL] 어떻게 쿼리에 매개 변수를 전달하는 방법? (0) | 2020.03.14 |