>데이터 베이스 >MySQL 튜토리얼 >PostgreSQL에서 LIMIT 절을 적용하기 전에 총 결과 수를 효율적으로 검색하려면 어떻게 해야 합니까?

PostgreSQL에서 LIMIT 절을 적용하기 전에 총 결과 수를 효율적으로 검색하려면 어떻게 해야 합니까?

DDD
DDD원래의
2025-01-20 11:52:12808검색

How Can I Efficiently Retrieve the Total Result Count Before Applying a LIMIT Clause in PostgreSQL?

LIMIT 이전 결과 개수를 효율적으로 확보

데이터베이스 데이터로 작업할 때 페이지가 매겨진 탐색 컨트롤을 렌더링하려면 총 페이지 수를 결정하는 것이 중요합니다. 전통적인 접근 방식은 쿼리를 두 번 수행하는 것이지만 이는 비효율적입니다. 이 문서에서는 필요한 쿼리 수를 최소화하면서 결과 개수를 결정하는 대체 방법을 살펴봅니다.

PostgreSQL 창 기능

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 쿼리 실행 순서

SELECTLIMIT 절이 적용되는 방식에 영향을 미치는 OFFSET 쿼리가 실행되는 순서를 이해하는 것이 중요합니다. WHERE 절은 기본 테이블에서 정규 행을 필터링하고 필터링된 하위 집합에 창 함수가 적용됩니다.

OFFSET 성능 고려 사항

OFFSET은 페이징에 유용하지만 테이블의 행 수가 늘어남에 따라 효율성이 점점 떨어집니다. 커서를 활용하거나 OFFSET을 사용하여 쿼리를 최적화하는 등의 대안을 사용해 보세요.

위 내용은 PostgreSQL에서 LIMIT 절을 적용하기 전에 총 결과 수를 효율적으로 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.