0

指定された範囲内のすべての日付の金額を合計します。

ロジックは似ています - while ループでは、日付範囲の金額列の合計を取得し、その合計を別の変数に追加します

日付範囲によっては、実行に 1 ~ 3 分かかります。

このため、コード側でタイムアウト例外が発生しています。

時間を短縮するためにストアド プロシージャに変更を加えることはできますか、または例外がスローされないようにコードでこれを処理する他の方法はありますか。

助けてください...

4

3 に答える 3

3

クエリのパフォーマンスを調整するさまざまな方法には、次のものがあります。

  • クエリを書き直す

クエリを記述する方法は 1 つではありません。OUTER JOIN を使用したクエリに時間がかかる場合は、INNER JOIN を使用して書き直してください。または、過度のデータベース読み取り操作を引き起こすような方法で WHERE 句が記述されている可能性があります。

  • テーブルの正規化または非正規化

テーブルを正規化すると理想的なデータベース設計が得られますが、多くの場合、クエリが不十分になります。頻繁に使用されるクエリがあまりにも多くの正規化されたテーブルにまたがる必要がある場合は、データの重複を検討してください。

  • インデックスの追加

適切に定義されたインデックスの欠如は、クエリの実行に長い時間がかかる原因となることがよくあります。インデックスを作成すると、クエリはテーブルではなくインデックスを検索します。

  • インデックスを削除しています。場合によっては、不適切に定義されたインデックスがクエリの実行速度を低下させる原因となります。たとえば、頻繁に検索される列をテーブルに含まないインデックス。このような場合は、インデックスを削除して再作成することをお勧めします。

ストアド プロシージャでクエリ実行時間をアクティブにすることから始めて、何が時間がかかるかを確認します。

SET STATISTICS TIME ON から * を選択 ...

次の方法で、クエリの実行計画をグラフィカルに表示することもできます。 [クエリ] > [実際の実行計画を含める] をクリックします。

クエリ パフォーマンス チューニングの詳細については、 Pinal Dave のブログを参照してください。これに関しては、彼が最高です。

于 2012-08-31T07:47:56.733 に答える
0

正しい方法は手順を最適化することですが、コードを投稿しなかったため、それについて何も言えません。別の方法は、症状を処理して、Connectionstringのタイムアウトを次のように増やしても例外がスローされないようにすることです。

"CommandTimeout = try any greater value;"
于 2012-08-31T07:42:13.330 に答える
0

クエリにその時間が本当に必要な場合は、SqlCommandのCommandTimeout プロパティを適切な値に設定することで、タイムアウトを防ぐことができます。

ただし、最初にクエリを最適化できるかどうかを確認してください。

于 2012-08-31T08:53:58.163 に答える