2010-11-29 15 views
6

よくある質問ですが、これまでのところ説得力のある答えが見つかりませんでした。ビジネス層またはデータベース層のページングによるデータのソートのベストプラクティスは何ですか?

私のプロジェクトでは、複数のテーブルからの結合結果である約20,000以上のレコードのセットに対してページングを行う必要があり、異なるシナリオで別々にソートする必要があります。

1データベース層ie. where dl.[row_number] between @index*@size+1 and @index*@[email protected]にストアプロシージャを使用してそれを行う、:

は現在、私の目の前にある2つのオプションがあります。 これを行う問題は、ソートごとにStore Procsを別々に書かなければならないことです。

2、ビジネスロジック層で行い、結果の上にページングとソートを行います。 (ie. skip(), take()) しかし、理想的ではありません.20,000レコードを取得することになる可能性がありますが、そのうちの10個だけが使用されます。

標準的なベストプラクティスはありますか?事前に感謝

+1

"where句"ごとに別のストアドプロシージャを実行する必要はありません。caseやorステートメントのようなことができるからです。 – jcolebrand

答えて

3

このロジックをデータベースレイヤに保持します。

ストアドプロシージャを使用した場合、その後もソート列(複数可)を含めるようにそうあなたは、これは、マルチユーザーアプリケーションである場合は、結果をフェッチしない限り、スケーラビリティの問題があるでしょう

0

を設定する権利を返すことができ、それを拡張1つの表示ページでトランザクションをコミットします。

たとえば、Webサイトのページ表示は、ユーザーが次のページに移動するたびに新しいクエリを実行する必要があります。代わりに、20Kの完全な結果をWebセッションのコンテキストに保持することができます。

並べ替えの列名(または列インデックス)をパラメータ化できないため、並べ替えのSQL言語に多少の煩わしさがあります。

関連する問題