2012-04-18 11 views
3

私たちは、この問題が戦っている:我々は、中に大きなテーブルを持っている再計算大きなテーブル

  • SQL Server 2008 R2(R2!)(数百万行)
  • 我々はこのテーブルとそれぞれの行を歩く必要がありますもしパフォーマンスが非常に重要であることを行うにはどのよう

(そのテーブルがC#アプリケーションからロードされる)C#コードによって再計算する必要がありますか?一種のバッチ処理ですか?

答えて

2

パフォーマンスが重要な場合は、SQL CLRを使用して新しい値を計算します。そのようにupdate文を使うことができます。 SQL CLRでは、使用できるコードが制限されているため、簡単なオプションではない可能性があります。

SQL CLRがオプションでない場合は別の方法があります:

私は整数主キーがあると仮定します。

  • リクエスト行のバッチを(10K程度)
  • トリックにあるアップデート
  • がアップデート
  • 繰り返し

を送る計算:これはのように私はそれを行うだろうすでに処理した行を追跡します。最後の行のID値を処理したままにします。

select top 10000 * 
from T 
where ID > @lastIDProcessed 
order by ID 

これは、高速で信頼性の高い実行を保証します。

+1

CLRが面白いと思います。小さなスニペットを書くことができますか?しかし、私たちのC#コードは非常に複雑です。 – Cartesius00

+0

ええ、SQL CLRで小さなスニペットを投稿することは本当にできません;-)コードが複雑な場合は、後者のオプションをお勧めします。 – usr

+0

OK、「更新を送信する」の部分はどうですか? – Cartesius00

関連する問題