データベース クエリでは、LIMIT を適用する前に結果の総数を決定することがページネーションにとって重要です。現在、一般的なアプローチでは、クエリを 2 回実行します。1 回目はすべての結果をカウントし、もう 1 回目は制限付きで目的のページを取得します。ただし、この方法は非効率的になる可能性があります。
幸いなことに、PostgreSQL 8.4 では、ウィンドウ関数というより効率的なソリューションが導入されました。ウィンドウ関数を使用すると、単一のクエリで合計結果数と制限された結果の両方を取得できます。
SELECT foo , count(*) OVER() AS full_count FROM bar WHERE <some condition> ORDER BY <some col> LIMIT <pagesize> OFFSET <offset>;
この方法では必要な情報が得られますが、すべての点で計算コストが高くなる可能性があることに注意してください。行は、LIMIT によって除外される場合でも処理する必要があります。
SELECT クエリ内のイベントのシーケンスを理解すると、ウィンドウ関数の動作を理解するのに役立ちます。 Postgres での操作の順序は次のとおりです。
ウィンドウ関数に加えて、影響を受ける行数を取得する代替方法があります。
これらのメソッドは、LIMIT 適用前の完全な数ではなく、クエリによって影響を受ける行数を提供します。
関連リソース:
以上がPostgreSQL で LIMIT を適用する前に合計行数を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。