ホームページ > データベース > mysql チュートリアル > PostgreSQL で LIMIT 句を適用する前に合計結果数を効率的に取得するにはどうすればよいですか?

PostgreSQL で LIMIT 句を適用する前に合計結果数を効率的に取得するにはどうすればよいですか?

DDD
リリース: 2025-01-20 11:52:12
オリジナル
807 人が閲覧しました

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

LIMIT 前の結果数を効率的に取得する

データベース データを操作する場合、ページ分割されたナビゲーション コントロールをレンダリングするには、合計ページ数を決定することが重要です。従来のアプローチではクエリを 2 回実行しますが、これは非効率的です。この記事では、必要なクエリの数を最小限に抑えながら結果数を決定する別の方法を検討します。

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クエリの実行順序

SELECT クエリが実行される順序を理解することが重要です。これは、LIMIT 句と OFFSET 句の適用方法に影響します。 WHERE 句はベース テーブルから条件を満たす行をフィルタリングし、フィルタリングされたサブセットにウィンドウ関数が適用されます。

OFFSET のパフォーマンスに関する考慮事項

OFFSET はページングに便利ですが、テーブル内の行数が増えると効率が低下します。カーソルを利用したり、OFFSET を使用してクエリを最適化するなどの代替手段の使用を検討してください。

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

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