오라클 데이터베이스는 결과 집합의 각 행에 고유한 행 번호를 제공하는 데 사용할 수 있는 편리한 메서드 row_number()를 제공합니다. Oracle PL/SQL 기본 사항 – 1부에서는 Oracle 데이터베이스의 row_number 및 기타 페이지 매김 방법에 대해 자세히 알아보십시오. 나는 다양한 데이터베이스 엔진으로 작업하는 즐거움을 했다. 당신은 아마 내가 SQL Server와 오라클에 대해 주로 쓰기 로 그래서 나는 적어도 그 두 가지를 잘 알고 있습니다. 그러나 나는 또한 MySQL과 PostgreSQL에서 시스템을 개발 할 수있는 기회를 가졌습니다. Oracle을 제외한 모든 데이터베이스 엔진에는 SELECT 쿼리에서 반환된 행 수를 제한할 수 있는 기능이 있습니다. 또한 패그인된 Oracle SQL 쿼리의 최대 결과를 추정하는 방법에 대한 중요한 참고 사항도 참조하십시오. 첫째, 오라클이 OFFSET으로 페이지 매김을 구현한 것을 기쁘게 생각합니다. ROWNUM 버전보다 사용하는 것이 훨씬 편리합니다. 불행하게도, 그것은 정말 잘못 수행또는 내가 뭔가를 놓치고 있다? 오프셋은 ROWNUM이 있는 이전 방법보다 느리게 나타납니다.

적어도 내 간단한 테스트에서, 오프셋의 성능은 만족스럽지 않습니다. 그것을 요약 – 나는 그것이 고정 될 때까지 그 기능을 멀리 할 것입니다. @wweicker 아래의 코멘트에서 지적했듯이 성능은 12c의 새로운 구문에 문제가 됩니다. 오라클이 그 이후로 개선했는지 테스트할 18c의 사본이 없었습니다. FETCH 또는 OFFSET에 대 한 좋은 Oracle 참조 페이지를 찾을 수 없습니다 하지만이 페이지는 이러한 새로운 기능에 대 한 좋은 개요. 더 나은 방법은 최종 사용자가 자신의 검색을 구체화한 다음 필요한 정보를 가져오는 데 도움이 되는 안내식 검색을 사용하는 것입니다. 이렇게 하려면 먼저 최종 사용자에게 검색 기준(결과 집합 없음)을 충족하는 값 목록을 제시한 다음 해당 세련된 검색을 사용하여 사용자에게 필요한 페이그(paginated) 정보를 가져옵니다. 이 접근 방식은 사용자, 응용 프로그램, 오라클 및 전체 네트워크에 도움이 됩니다. 한 번에 30개 또는 40개의 레코드와 같은 데이터 페이지를 페이지 크기로 지정할 수 있는 SQL 쿼리가 필요한 경우가 많습니다.

실제로 데이터베이스 페이지는 Java 웹 개발자, 특히 가장 큰 데이터 집합을 처리하는 일반적인 요구 사항입니다. 이 문서에서는 오라클 10g 데이터베이스를 검색하여 페이지 가 용으로 쿼리하거나 오라클의 페이징을 사용하여 데이터를 검색하는 방법을 살펴보겠습니다. 또한 많은 Java 프로그래머는 내부 및 외부 페이징을 모두 지원하는 JSP에서 페이징을 위해 디스플레이 태그를 사용합니다. 내부 페이징의 경우 모든 데이터가 한 번에 메모리에 로드되고 페이지 크기에 따라 태그가 페이지 크기를 기준으로 페이지 매김을 처리하지만 메모리에 있는 많은 개체를 감당할 수 있는 작은 데이터에만 적합합니다. 업데이트 : 나는 브라이언의 제안을 사용할 수 있었다, 그것은 좋은 작동. 일부 최적화 작업을 하고 싶지만 페이지가 1분이 아닌 4~5초 내에 나타나고 있으며 페이징 컨트롤이 새 저장된 프록시와 매우 잘 통합될 수 있었습니다. 검색에서 사용할 수 있는 명확한 순열 수(검색 열 집합)만 있는 경우 이러한 집합은 응용 프로그램의 EOD(하루 말) 또는 SOD(시작) 활동에서 미리 채워질 수 있습니다. 또한 더 빠른 액세스를 위해 Oracle의 인덱스 구성 테이블(IoT)에서 이러한 값을 미리 채울 수도 있습니다.

이 line_number 열을 사용하면 Java 프로그램에서 Oracle 데이터베이스로 시작 행 및 끝 행을 전달할 수 있으므로 페이지 크기를 기준으로 한 페이지별 또는 한 행에서 1~30개 또는 5번째 행에서 30개로 더 구체적으로 결과 페이지를 얻을 수 있습니다. 오라클 데이터베이스 12c는 이러한 기능에 대한 ANSI 표준을 포함하고 있습니다. 어떻게 작동하는지 보여 드리겠습니다. 성능 최적화를 위한 거대한 분야가 있기 때문에 이러한 관점에서 도볼 수 있도록 살펴보겠습니다. 이 짧은 문서의 목적은 최종 사용자에게 최상의 응답 시간을 얻기 위해 이러한 두 기능을 통합하는 방법을 제안하는 것입니다.