ホームページ >データベース >mysql チュートリアル >PostgreSQL クエリで LIMIT を適用する前に合計行数を効率的に判断するにはどうすればよいですか?
データベース データ ページングでは、通常、ページング コントロールをレンダリングするための合計ページ数を決定する必要があります。通常、これには 2 つの別々のクエリを実行する必要があります。1 つは COUNT() を使用して合計を取得し、もう 1 つは LIMIT を使用して現在のページのデータを取得します。
この方法は非効率的です。幸いなことに、PostgreSQL には、LIMIT を適用する前に合計を取得するより良い方法があります。ウィンドウ関数を使用します。
PostgreSQL 8.4 で導入されたウィンドウ関数を使用すると、「ウィンドウ」で定義されたデータセットに対して計算を実行できます。適切なウィンドウを指定することで、LIMIT 操作に影響を与えることなく合計を取得できます。
次のクエリを考えてみましょう:
<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 が適用される前の合計行数を示します。
注: この方法でウィンドウ関数を使用すると、従来の 2 つのクエリを使用するアプローチよりも計算コストが高くなる可能性があります。これは、ページング パラメーターに関係なく、すべての行をカウントする必要があるためです。
場合によっては、LIMIT より前の合計を取得する必要はありません。代替案は次のとおりです:
以上がPostgreSQL クエリで LIMIT を適用する前に合計行数を効率的に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。