2009-07-03 5 views
7

Sql Server 2008では、ストアドプロシージャを使用したデータベースページングには多くのオプションが用意されています。たとえば、hereおよびhereを参照してください。どのパフォーマンス向上のためのページング方法(Sql Server 2008)ですか?

OPTIONS:

  1. ROW_NUMBER()関数
  2. ROWCOUNT
  3. CURSORS
  4. 一時テーブル
  5. ネストされたSQLが
  6. OTHERS
を問い合わせますROW_NUMBERを使用して

ページングが()performance issues有することが知られている:

をページング方式は、(JOINを持つ大きなテーブルのための)最高の性能を持っている、教えてください?

可能であれば、関連記事へのリンクも提供してください。

ありがとうございます。

+0

は、おそらくあなたが...作るために重要な違いがある –

答えて

3

答えなければならない質問は、エンドユーザーに合計行数を表示する場合です。最後のページの番号を計算するには、最後の行番号も必要です。

この情報がない場合は、テンポラリテーブルを使用するとよいでしょう。キーを選択してLIMITを使用して、興味のあるキーまでキーを取得することができます。これを行うと、典型的なユースケースは最初の数ページだけを取得します。

最後のページ番号が必要な場合は、ROW_NUMBER()を使用できます。テンポラリテーブルを使用すると、LIMIT句を使用できないため、ROW_NUMBER()の計算と同じように、この方法を使用することができなくなります。

+0

1尋ねる詳細レベルを一致させるために、いくつかの300の担当者の恵みを追加する必要があります。それを含まないパフォーマンステストは私には役に立たない。 – RedFilter

+0

ありがとうございます。ページ番号を生成するには、合計行数が必要です。 ROWCOUNTメソッドが最も速いと思われますが、独自のソート列が必要です(私の場合は一意ではありません) – dev

0

次のクエリを使用して行数を取得できます。実際に、私は常に、総行数を必要とする -

WITH data AS 
(
     SELECT ROW_NUMBER() OVER (order by memberid) AS rowid, memberid 
     FROM Customer 
) 
SELECT *, (select count(*) from data) AS TotalCount 
FROM data 
WHERE rowid > 20 AND rowid <= 30 
+0

OPは、彼が最良の方法を尋ねていて、問題を記述する別の場所に明示的にリンクしていますさらに別の解決策)をこのアプローチで使用します。 –

関連する問題