ホームページ > データベース > mysql チュートリアル > 複数の SQL クエリを使用せずに、ページ分割されたクエリの合計結果数を効率的に取得する方法

複数の SQL クエリを使用せずに、ページ分割されたクエリの合計結果数を効率的に取得する方法

Barbara Streisand
リリース: 2025-01-20 12:23:09
オリジナル
212 人が閲覧しました

How to Efficiently Get Total Result Count in Paginated Queries without Multiple SQL Queries?

ページ分割されたクエリの最適化: 合計結果数を効率的に取得する

効率的なページネーションでは、ページネーション コントロールを正確に表示するために結果の総数を知る必要があります。 従来の方法には 2 つの別々のクエリが含まれます。1 つはすべての結果をカウントするクエリ、もう 1 つは現在のページのデータをフェッチするクエリです。 ただし、このアプローチは非効率的になる可能性があります。

より効率的な SQL アプローチ

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>
ログイン後にコピー

この方法は洗練されていますが、完全な行数の計算により、非常に大きなテーブルのパフォーマンスに影響を与える可能性があることに注意することが重要です。 パフォーマンスのトレードオフについて慎重に検討する必要があります。

パフォーマンスを最適化するための代替戦略

大規模なデータセットのパフォーマンスを向上させるには、次の代替案を検討してください。

  • PostgreSQL の内部メカニズムを利用して、GET DIAGNOSTICSpg_num_rows などのクライアント側関数を介して影響を受ける行数を取得します。
  • 効率を高めるために大規模なテーブルで OFFSET を利用するクエリを最適化します。 これには、インデックス付け戦略または代替クエリ構造が含まれる場合があります。

以上が複数の SQL クエリを使用せずに、ページ分割されたクエリの合計結果数を効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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