2012-05-03 11 views
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/including-count-of-a-result-in-the-main-query

+0

その疑似クエリは意味をなさない。 'count'がテーブルの行数を保持している場合、' countとcount + 10の間に 'は何も返しません。 – weenoid

+0

カウント+1。ありがとう。 countはページ番号を記録します:S – Nishant

+0

'count'はテーブルの行数または現在のページ番号を参照していますか? – weenoid

答えて

3

同様の質問があり、彼らは(10のような)結果のだけ要求された量を生成するために、カウントを推定する可能性があります。推定カウントは非常にです。

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

  • がtemp-に無制限のデータのクエリを実行し、無制限のデータクエリを実行し、クライアント
  • 上のすべてが、10件の結果を破棄し、計数し、データのクエリを実行主キーが行番号である表。 1つのシークでrownumberで任意のサブセットを選択することができます。

SQL Serverは異なるインデックスまたは破棄結合を使用できるため、データを非常に安価にすることができます。

関連する問題