2011-08-14 10 views
0

こんにちは私はカスタムページングを使用しています。このクエリでデータを取得しています。n番目の番号のパフォーマンスを選択していますか?

DECLARE @pageIndex INT = 0; 
DECLARE @pageSize INT = 10; 
WITH foo AS (
    SELECT ROW_NUMBER() OVER (ORDER BY test ASC) as rownumber, test, col 
    FROM TestDB.dbo.test 
) 
SELECT test, col FROM foo 
WHERE rownumber BETWEEN (@pageIndex * @pageSize) + 1 AND (@pageIndex * @pageSize) + @pageSize 

私はパフォーマンスを考慮する必要がありますが、ここでは質問です。
SQL Serverのパフォーマンスはどちらの方が優れていますか?
テーブル内の全データを選択し、asp.net、phpなどでページングするか、上記の方法でデータを選択します。
私は上記の方法でデータ全体を選択し、すべての行にRow Numberを与えてからRow NumberがXとYの間にある行を選択しているので少し混乱します。

答えて

3

質問。実際には以下の条件に依存します:

  1. ページングしているデータ量。
  2. これらのデータに頻繁にアクセスする必要がある(つまり、一度にデータにアクセスするクライアントの数)。

大量のデータがある場合は、データベースエンジンが最適化されているため、SQLページングが高速化されるはずです(適切なインデックスが作成されている場合)。 しかし、データ量が少ない(RAMメモリに収まる)場合、IOはボトルネックではないため、すべてのデータをロードしてパフォーマンスを向上させます。

一般的に、私はSQLページングの方がいいです。これは、データセットが増えれば維持しやすく、最適化するのが簡単です。とにかくioがボトルネックになってしまった場合は、リソースに応じてデータベースを複製したり、実行中のアプリケーションを書き直すことなくハードウェアなどを変更することができます。

要約すると、それは本当に依存しています。あり

3

は、それがウェブページ内のページへのより良いかもしれあなたはいくつかのページよりも多くを持っていない場合は、すべての場合

に合う誰ソリューションではありません。

私たちの経験では、Webページのページングが私たちのために働いていました:divを使ってより多くの結果を表示し、すべてのデータをレンダリングしました。もっと実際的には、ユーザーのためには数ページ以上の結果が無用であるため、上限に達しました。そこで、SQLへのラウンドトリップを行わずに、有限で妥当な量のデータを管理する必要がありました。

関連する問題