実行する必要のあるデータ分析があります。平均すると、50Kから150Kの行の間のどこかに関係します。これらの行から、5つの異なる基準に基づいてSum(X)とCount(X)の合計を抽出する必要があります。それについては2つの方法があります。
- Sum()またはCount()を使用して列Xのデータを集約するように設計された10個の異なるクエリを記述します。それぞれを実行し、SqlCommand.ExecuteScalar()を使用して結果を取得します。
- さまざまな条件を評価するために必要となるさまざまなパラメーターをすべて含むカスタムオブジェクトを作成します。SqlCommand.ExecuteDataReader()を使用して、さまざまな条件付きサブセットをすべて含むスーパーセットを構成するために必要なすべてのデータを返す1つのクエリを実行します。DataReaderから各行を新しいオブジェクトに読み込み、各行をListコレクションに追加します。すべてのデータが取得されたら、Linq-to-Objectを使用して、さまざまな条件に基づいて必要なさまざまなSum()値とCount()値を決定します。
それぞれを試してどれが最も速いかを確認できることは知っていますが、どちらがより速くなる可能性があるかについてのコミュニティのアドバイスに興味があります。SQLServerとWebServerがそれぞれ独自のマシンで実行されており、それぞれに十分なメモリがあると想定します。
現在、オプション1に傾いています。DBへのクエリは他にもたくさんありますが、DB自体がすべての集計作業を実行し、SQLServerとWebサーバーの間で渡されるデータはごくわずかです。オプション2では、クエリは1つだけですが、非常に大量のデータを.Netに渡すため、.Netは、集計関数に関するすべての面倒な作業を実行する必要があります(ただし、私は実行しません)。基礎となるものは何でもありますが、SQL Serverは、これらのタイプの大きな集計関数を実行するのにより効率的であると思われます)。
どちらに進むべきか(または私が見逃している3番目のオプション)について何か考えはありますか?