1

カウントを取得し、そのカウントを変数として同様のクエリに渡して、ページ付けされたレコードを取得するシナリオがあります。したがって、基本的には、完全なテーブルを内部的に作成し、そのカウントを使用して1ページあたり10の同じテーブルを表示することにより、すべてのカウントを取得するために完全なクエリを実行しています。この種の複数のクエリを回避するには、どのような解決策が必要ですか?

このようなものは疑似言語です。

select count {big table}

select big table where records are between count and count+10

同じクエリでCOUNT変数を取得するための賢明な方法はありますか?

Googleは検索をどのように処理するのでしょうか、最初にすべてのレコードを検索するのでしょうか、それともページ数を追跡せずにレコードをフェッチするのでしょうか。ページ番号は、ユーザーから送信された変数に依存するため、事前に計算することはできません。

編集:私はここに同様の質問がありますhttps://dba.stackexchange.com/questions/161586/include-count-of-a-result-in-the-main-query

4

1 に答える 1

3

グーグルに関しては、彼らは要求された量の結果(10のような)だけを生成し、カウントを推定する可能性があります。推定数は非常に不正確です。

SQL Serverにすべての結果をカウントさせ、それらのサブセットのみを取得させることはできません。これに対処するための3つの戦略があります:

  • カウントとデータクエリを実行します
  • 無制限のデータクエリを実行し、クライアントで10件を除くすべての結果を破棄します
  • 主キーが行番号である一時テーブルに対して無制限のデータクエリを実行します。次に、即座にカウントして(最後の行を取得)、1回のシークで行番号でサブセットを選択できます

SQL Serverは異なるインデックスを使用したり、結合を破棄したりできるため、データのカウントは大幅に安くなる可能性があります。

于 2012-05-03T11:12:28.970 に答える