2

フィルタリングされるデータの数を選択しました。

結果に基づいて、クエリをさらに数回繰り返す必要があります。

これで、2 つのオプションを使用できます。

1)。フィルタリングされたクエリを毎回改善することによるデータベースのクエリ

また

2)。フィルター処理されたデータを初めて DataTable に取得する - クエリを実行してから、その DataTable に対してさらにフィルター処理を実行する - (DataBase に対してクエリを実行する必要はありません)。

どの状況でパフォーマンスが向上しますか?

PS: 同じ種類の質問が以前に出されたことは知っています。しかし、適切な答えが得られませんでした。:)

4

2 に答える 2

2

メモリ内に既により広いデータ セットがある場合は、"2" の方がほぼ例外なく高速になります。ネットワーク ホップなし、帯域幅なし、サーバー側時間なし。単なるメモリ内フィルター。ASP.NET などのステートレス環境でも、ページ間で結果を再利用できるように、そのような (パラメーター化された) クエリの結果をキャッシュするのが一般的です。

もちろん、不条理なレベルに「2」を使用しないでください...テーブル全体、またはかなりの数の行から始めることは、多くのレベルで悪いです:

  • 初期費用が大きい
  • 索引付けをまったくまたはほとんど使用しない
  • メモリ内で処理する多くの

ただし、多くの一般的なシナリオでは、通常、結果の最初のページとカウントのみをクエリするため、実際にはそのデータ セットはありません (1 ページとカウントから、フィルター処理されたサブセットが何であるかを推測することはできません)。のように見えます)。したがって、「1」の方が適切なオプションになります (ただし、ページングされた結果のキャッシュも保持されます)。

于 2012-04-16T05:56:46.183 に答える
1

適切な答え:関心のある測定アプローチよりも、期待される/望ましいパフォーマンスを決定し、どれが適合するかを確認する必要があります。

実際のデータに近いデータセットでプロトタイプを測定する必要があることに注意してください。あなたが提案した2つのアプローチは、メモリ使用量とIO /ネットワークアクセスの間の明示的なトレードオフであるため、パフォーマンスが本番システムにかなり近いマシンで実際のデータを試さない限り、結果を予測することはできません.

于 2012-04-16T05:56:53.477 に答える