ホームページ >データベース >mysql チュートリアル >複数の SQL クエリを使用せずに、ページ分割されたクエリの合計結果数を効率的に取得する方法
効率的なページネーションでは、ページネーション コントロールを正確に表示するために結果の総数を知る必要があります。 従来の方法には 2 つの別々のクエリが含まれます。1 つはすべての結果をカウントするクエリ、もう 1 つは現在のページのデータをフェッチするクエリです。 ただし、このアプローチは非効率的になる可能性があります。
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>
この方法は洗練されていますが、完全な行数の計算により、非常に大きなテーブルのパフォーマンスに影響を与える可能性があることに注意することが重要です。 パフォーマンスのトレードオフについて慎重に検討する必要があります。
大規模なデータセットのパフォーマンスを向上させるには、次の代替案を検討してください。
GET DIAGNOSTICS
や pg_num_rows
などのクライアント側関数を介して影響を受ける行数を取得します。OFFSET
を利用するクエリを最適化します。 これには、インデックス付け戦略または代替クエリ構造が含まれる場合があります。以上が複数の SQL クエリを使用せずに、ページ分割されたクエリの合計結果数を効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。