編集: 私はまだもっと答えを待っています。ありがとう!
SQL 2000 では、新しい ID 列と主キーを使用して一時テーブルを作成し、A と B の間の ID 列を選択する一時テーブル メソッドを使用していました。
SQL 2005が登場したとき、私はそれを知りRow_Number()
、それ以来ずっと使用しています...
しかし今、深刻なパフォーマンス上の問題を発見しましたRow_Number()
。それほど巨大ではない結果セットを操作し、ID 列を並べ替える場合は、非常にうまく機能します。ただし、10,000 を超えるレコードなどの大規模な結果セットを操作し、非 ID 列で並べ替える場合、パフォーマンスは非常に低下します。結果セットが 250,000 レコードを超える場合、ID 列で並べ替えてもパフォーマンスが低下します。私にとっては、「コマンドタイムアウト!」というエラーがスローされるようになりました。Row_Number()
SQL 2005 で大きな結果セットをページ分割するために何を使用しますか? この場合、一時テーブルの方法はまだ優れていますか? SET ROWCOUNT で一時テーブルを使用するこの方法がより適切に実行されるかどうかはわかりません...しかし、複数列の主キーがある場合、間違った行番号を与えるという問題があると言う人もいます。
私の場合、結果セットを日付型の列で並べ替えることができる必要があります...本番用のWebアプリ用です。
SQL 2005 で高パフォーマンスのページネーションのために何を使用しているか教えてください。また、インデックスを作成するスマートな方法も知りたいです。ここでは、適切な主キーおよび/またはインデックス (クラスター化/非クラスター化) を選択することが大きな役割を果たすと思われます。
前もって感謝します。
PSスタックオーバーフローが何を使用するか知っている人はいますか?
編集:私のものは次のように見えます...
SELECT postID, postTitle, postDate
FROM
(SELECT postID, postTitle, postDate,
ROW_NUMBER() OVER(ORDER BY postDate DESC, postID DESC) as RowNum
FROM MyTable
) as DerivedMyTable
WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows) - 1
postID: Int、Identity (自動インクリメント)、主キー
postDate: 日時
編集:誰もが Row_Number() を使用していますか?