ホームページ > データベース > mysql チュートリアル > 複数のクエリを使用せずに PostgreSQL のページネーションの合計行数を効率的に決定するにはどうすればよいですか?

複数のクエリを使用せずに PostgreSQL のページネーションの合計行数を効率的に決定するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-20 11:56:10
オリジナル
881 人が閲覧しました

How Can I Efficiently Determine the Total Row Count for Pagination in PostgreSQL Without Multiple Queries?

ページ分割されたクエリの最適化: LIMIT を適用する前に行数を決定します

データベースのページング クエリでは、ページ ナビゲーションをレンダリングするために、総ページ数を正確に見積もることが重要です。従来のアプローチでは通常、2 つのクエリを実行する必要があります。1 つは COUNT() 関数を使用して結果の総数を決定し、もう 1 つは LIMIT 句を使用して特定のページの結果を取得します。

効率的な解決策: ウィンドウ関数を使用します

最新の PostgreSQL バージョン (8.4 以降) では、ウィンドウ関数を使用したより効率的な方法が提供されます。以下に示すように、PARTITION 句を使用して COUNT(*) OVER() 式を追加すると、クエリは LIMIT 句を適用する前に行の合計数をカウントできます。

<code class="language-sql">SELECT foo, COUNT(*) OVER () AS full_count
FROM bar
WHERE condition
ORDER BY col
LIMIT pagesize
OFFSET offset;</code>
ログイン後にコピー
このアプローチの利点は、単一のクエリで合計数と制限された結果の両方を取得できることです。ただし、full_count が OFFSET LIMIT 値よりも大幅に大きい場合、この方法の計算コストが従来の方法よりも高くなる可能性があることに注意してください。

カウントを取得する別の方法

効率の問題が単一のクエリよりも重要な場合は、影響を受ける行の数を取得する他の方法が存在します。

  • 内部ログ: PostgreSQL は、クエリの実行後に影響を受ける行に関する内部情報を保持します。 plpgsql の GET DIAGNOSTICS や PHP の pg_num_rows などの API は、このカウントに明示的にアクセスできます。
  • クライアント側のカウント: 一部のデータベース クライアントでは、クライアント側で直接行カウントを行うことができるため、個別のクエリが不要になります。
これらのソリューションを検討することで、開発者はページネーション戦略を最適化し、効率的なデータ取得とユーザーのシームレスなページネーション エクスペリエンスを確保できます。

以上が複数のクエリを使用せずに PostgreSQL のページネーションの合計行数を効率的に決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート