집 >데이터 베이스 >MySQL 튜토리얼 >PostgreSQL에서 LIMIT 절을 적용하기 전에 총 결과 수를 효율적으로 검색하려면 어떻게 해야 합니까?
데이터베이스 데이터로 작업할 때 페이지가 매겨진 탐색 컨트롤을 렌더링하려면 총 페이지 수를 결정하는 것이 중요합니다. 전통적인 접근 방식은 쿼리를 두 번 수행하는 것이지만 이는 비효율적입니다. 이 문서에서는 필요한 쿼리 수를 최소화하면서 결과 개수를 결정하는 대체 방법을 살펴봅니다.
PostgreSQL 버전 8.4부터 창 함수는 단일 쿼리에서 전체 개수 결과와 제한된 결과 집합을 모두 수집하는 강력한 방법을 제공합니다. OVER()
함수와 함께 count(*)
절을 사용하면 개발자는 LIMIT
절을 적용하기 전에 반환될 총 레코드 수를 계산할 수 있습니다.
<code class="language-sql">SELECT foo, count(*) OVER() AS full_count FROM bar WHERE <some condition=""> ORDER BY <some col=""> LIMIT <pagesize> OFFSET <offset>;</code>
이 접근 방식은 단순히 제한된 결과 집합을 검색하는 것보다 계산 비용이 더 많이 들 수 있다는 점에 유의하는 것이 중요합니다. 따라서 전체 개수와 제한된 결과 집합이 모두 필요한 경우 이 방법을 사용하는 것이 좋습니다.
전체 개수가 필요하지 않은 경우 영향을 받은 행 개수를 검색하는 다른 방법이 있습니다. PostgreSQL은 클라이언트가 액세스할 수 있는 내부 장부 정보를 유지 관리합니다. PHP에서는 pg_num_rows
함수를 이러한 목적으로 사용할 수 있습니다. 또한 plpgsql은 행 수를 검색하는 GET DIAGNOSTICS
명령을 제공합니다.
SELECT
및 LIMIT
절이 적용되는 방식에 영향을 미치는 OFFSET
쿼리가 실행되는 순서를 이해하는 것이 중요합니다. WHERE
절은 기본 테이블에서 정규 행을 필터링하고 필터링된 하위 집합에 창 함수가 적용됩니다.
OFFSET
은 페이징에 유용하지만 테이블의 행 수가 늘어남에 따라 효율성이 점점 떨어집니다. 커서를 활용하거나 OFFSET
을 사용하여 쿼리를 최적화하는 등의 대안을 사용해 보세요.
위 내용은 PostgreSQL에서 LIMIT 절을 적용하기 전에 총 결과 수를 효율적으로 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!