ホームページ >バックエンド開発 >PHPチュートリアル >LIMIT を適用する前に PostgreSQL で合計結果数を効率的に取得する方法

LIMIT を適用する前に PostgreSQL で合計結果数を効率的に取得する方法

DDD
DDDオリジナル
2024-12-13 22:48:11699ブラウズ

How to Efficiently Retrieve Total Result Count in PostgreSQL Before Applying LIMIT?

アプリケーションを制限する前に結果数を取得するための最適なアプローチ

データベース ページングでは、ページネーション コントロールをレンダリングするために合計ページ数を決定することが重要です。ただし、この目的でカウント クエリと制限クエリを個別に実行するのは非効率的になる可能性があります。この記事では、データベース制限を適用せずに結果数を取得するための改良された手法について説明します。

Postgres ウィンドウ関数

PostgreSQL バージョン 8.4 以降では、ウィンドウ関数が導入され、パーティション化されたサブセットに対する集計関数の計算が可能になりました。データ。これにより、合計数を決定し、単一のクエリで限定された結果を取得できます。

SELECT foo,
       COUNT(*) OVER() AS full_count
FROM bar
WHERE <some condition>
ORDER BY <some col>
LIMIT <pagesize>
OFFSET <offset>;

ただし、この方法では、条件を満たすすべての行をカウントする必要があるため、追加のパフォーマンス オーバーヘッドが発生する可能性があり、大規模なクエリのパフォーマンスに影響を与える可能性があります。合計行数に近いテーブルまたは OFFSET 値。

結果数の代替オプション

パフォーマンスが低い場合懸念がある場合は、OFFSET および LIMIT アプリケーションとは関係なく、別のアプローチを使用して、影響を受ける行の最終的な数を取得できます。 Postgres の内部ブックキーピングはこの情報を追跡し、一部のクライアントがアクセスできます。

  • PL/pgSQL: GET DIAGNOSTICS を使用して SQL コマンドを実行した後、行数を取得します。
  • PHP: pg_num_rows 関数を使用して、行数を決定します。影響を受ける行。

追加リソース

  • [バッチ クエリによって影響を受ける行数の計算PostgreSQL](https://dba.stackexchange.com/questions/247142/calculate-number-of-rows-affected-by-batch-query-in-postgresql)

以上がLIMIT を適用する前に PostgreSQL で合計結果数を効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。