2

1 時間あたり数百万のオーダーで、かなりの数の行を入力する必要があるテーブルがあります。

現在、エンティティ フレームワークを使用して C# でアプリケーションを開発していますが、一括コピーはサポートされていません。以前に一括コピーを使用するソリューションを開発しましたが、これは大幅なパフォーマンスの向上でした。

UNIQUE制約の競合を解決するために、データをステージング テーブルにコピーしてから、ステージング テーブルを運用テーブルとマージしています。

今日の私の質問は、一時テーブルをストアド プロシージャ内の変数として使用し、そこですべてのマージと競合解決を行うべきですか? 現在のソリューションでは、一括コピーを実行してから、テーブルをマージして空にするストアド プロシージャを呼び出します。

一時テーブルを使用すると、パフォーマンスにどのような影響がありますか?

一時テーブルを使用することは悪い習慣と見なされますか? もしそうなら、なぜですか?

この問題を解決するために使用するのに適した MSSQL 2012 の代替手段はありますか?

4

2 に答える 2

1

一時テーブルをストアド プロシージャ内の変数として使用し、そこですべてのマージと競合解決を行う必要がありますか?

プロシージャの異なるインスタンスが同じ行を読み取って変更しようとする可能性があるため、ストアドプロシージャの同時実行の問題を回避するには、一時テーブルを使用する方がよいと思います。

一時テーブルを使用すると、パフォーマンスにどのような影響がありますか?

一時テーブル (およびテーブル変数) が格納されるtempdbため、そこでボトルネックが発生する可能性があります。

一時テーブルを使用することは悪い習慣と見なされますか?

いいえ。ただし、それらを必要なく使用すると、最初に何らかのクエリでデータを読み取り、それを一時テーブルに書き込み、もう一度データを読み取るため、追加の書き込み操作と読み取り操作を行うことになります。

于 2012-11-09T08:35:17.080 に答える
0

一時テーブルは遅いため、回避できる場合は使用しません。tempTables を使用する唯一の理由は、複数のユーザーがその手順を使用している場合です。その場合は良いかもしれません。

于 2012-11-09T08:37:33.837 に答える