2011-12-27 9 views
0

私は、spが約30レコードセットを返すシナリオを持っています。レコードセットの数を減らすと、C#で多くのループを記述してデータを取得し、正しいバケットに入れる必要があります。 SQLのレコードセット数を減らし、C#のループとコードの複雑さを増やすことは有益でしょうか?SQLでレコードセットの数が増えるとアプリケーションのパフォーマンスが低下しますか?

+0

おそらく、おそらくそうではありません。あなたはそれを試してみる必要があります – gbn

答えて

0

1つのストアドプロシージャから30レコードセットを返すことは、少ないレコードセットを返しますが複数のストアドプロシージャを呼び出すよりも望ましいですか。

  • のような多くの要因にウェブサーバとのSQLServer
  • あなたはの点では通常、その優れた

を照会データの種類と量との間のネットワーク帯域幅と遅延に依存

1

データベースへのラウンドトリップ回数を減らすことができます。しかし、取得する必要があるデータ量が非常に多い場合は、アプリケーションの応答性が低下する可能性があります。

あなたのアプリの特定のニーズについてもっと知りません。

0

本当にあなたのアプリケーションによりますが、各データセットのすべてのデータが必要ですか。

データベースに余分なラウンドトリップを追加すると、通常パフォーマンスが低下します。しかし、あなたが試してみるまで(または完全なコードレビューをする)ことは決して分かりません。

1

30レコードセットを返すか、同じデータを返すストアドプロシージャが30個ある場合でも、データベースアクセスコードに正確に同じ数のレコードを処理し、同じ数のループを持つ必要があります。

データを取得するために30個の異なるストアドプロシージャのコマンドを作成して実行する必要がないため、30個のレコードセットアプローチにわずかなパフォーマンス上の利点があります。

しかし、特にメモリ消費の点で、データベースとアプリケーションへの全体的な影響は、30レコードセットアプローチの方が大きくなると思います。このアプローチでは、アプリケーションコードが処理している間に何か(SQL Serverまたはアプリケーション)が取得したデータをどこかに保持する必要があります。 spアプローチを使用する場合、処理の任意の時点で処理するために保持されているデータは、通常、spアプローチではかなり小さくなります。

パフォーマンスに関して、データベースの並行性とロックに潜在的な問題もあります。 1つのspですべてのデータを検索すると、ストアドプロシージャの次のデータセットを続行する前に、ロックがクリアされるのを待つ必要がないため、全体のデータ検索速度が低下する可能性があります。これは、より長い時間の間、より高いメモリ消費を意味する。 spアプローチでは、同じ時間量で検索がブロックされることがありますが、ロックがクリアされるまで既に取得済みのデータを保持する必要がないため、メモリ消費量は平均して少なくなります。

ただし、1時間に何万件ものトランザクションを実行していないか、レコードセットにギガバイトのデータが含まれている場合は、アプローチを変更するとアプリケーションに重大な影響を及ぼすとは思われません。保守性の観点からは最高だと思います。

関連する問題