2

私はすでに、少なくとも1,000,000レコードを含む大規模な MS SQL Server データベース テーブルをページングする 2 つの非常に高速な方法を実装しましたが、どちらの方法の長所と短所を判断することもできませんでした。どちらかについてアドバイスをいただければ幸いです。

1 つ目は、SQL クエリを実行し、フィルタリングされたレコードの主キー値のみを返すことです。おそらく 100 ~ 1000 の TOP 句を指定します。次に、これらを Web サーバー上のセッション変数に配置し、それに応じて、主キー値のサブセットをサーバーに返すことでページを移動できます。

これの良い点の 1 つは、ユーザーが最初に検索を実行したときに 1 回だけレコードのフィルタリングが行われることです。次に、次のレコードのプレビューなど、必要に応じてレコード セット全体を一度に 1 項目ずつページングできることです。この方法は、すでにフィルタリングされたレコードをさらにフィルタリングすることに関して、いくつかの利点も提供します。これは、共通の属性、役職、取締役など、主キー値のリストを SQL Server に戻すことでフィルタリング可能なオプションを決定できるためです。

2 番目のオプションは、「ページあたりのレコード数」や「ページ番号」などの変数を指定して、SQL Server 経由でフィルタリングとページングの両方を実行することです。

これの利点は、サイズが間違いなく少なくとも 1000 バイト以上になるユーザーセッションで Web サーバーを詰まらせる必要がないことです。これは、Web サイトユーザーの数が増加するにつれて、長期的にのみ問題を引き起こします。対照的に、マイナス面は、最終的に最初のオプションのプラスとしてリストしたものです。たとえば、単一ページまたは主キー値のサブセットのみを持つレコードセット全体のフィルタリングオプションを決定する機能の欠如などです。 Web サーバー上で動作します。

特に結果の主キー値をセッション変数、メモリ、代替オプションなどに保存することに関して、上記を考慮して、みんなの考えは何ですか?

4

1 に答える 1

0

私は、データベースの時間は Web サーバーの時間よりも価値があると考えるタイプの人間です。しかし、それが私のアプローチです。あなたの場合、どのようにデータを取得しますか? DataSet/DataTables を使用していますか、それとも Strong 型のコンテナーを使用していますか? Web サーバー側またはクライアント側でさえ、linq や別のフィルタリング手法を使用しないのはなぜですか? (すべてのレコードをユーザーに表示し、javascript を使用してフィルタリングすることができます)。

于 2013-07-09T17:34:25.847 に答える