ページング データの結果数の取得を最適化します
データ取得のページング機能を実装する場合、ページング コントロールを正確にレンダリングするには、合計ページ数を決定することが重要です。一般的なアプローチは 2 つのクエリを実行することです。1 つは COUNT() 関数を使用して結果の総数を取得し、もう 1 つは LIMIT 句を使用して現在のページ データを表示します。
しかし、このアプローチは非効率的です。 PostgreSQL はバージョン 8.4 以降ウィンドウ関数を導入し、より良いソリューションを提供しています。
ウィンドウ関数を使用する
ウィンドウ関数 COUNT(*) OVER() を使用すると、限られたデータを取得しながらクエリ内の結果の総数を計算できます。例は次のとおりです:
<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>
full_count 列は、LIMIT 句と OFFSET 句が適用される前の結果の合計数を示します。この方法では、条件を満たすすべての行をカウントする必要があるため、パフォーマンスに影響を与える可能性があることに注意してください。小さいテーブル、または full_count が OFFSET LIMIT 未満の場合、影響は最小限です。ただし、結果セットが大きい場合は、代替手段を検討する価値があります。
最終カウントの代替方法
ウィンドウ関数以外にも、完全なカウントを計算せずに最終的なカウントを取得する方法があります。
以上がPostgreSQL でページ分割されたデータの合計結果数を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。