ページ分割されたクエリの最適化: 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>
カウントを取得する別の方法
効率の問題が単一のクエリよりも重要な場合は、影響を受ける行の数を取得する他の方法が存在します。
以上が複数のクエリを使用せずに PostgreSQL のページネーションの合計行数を効率的に決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。