2009-07-06 22 views
4

のは、私はSQL Serverのインデックス付きビューを持っているとしましょう、二つのテーブル、tbTableOne、およびtbTableTwoから読み込むvwIndexedView、。トランザクション中にインデックス付きのビューが更新されますか?

トランザクション内の2つのテーブルのいずれかでアクションを実行すると、インデックス付きビューはどうなりますか?それは即座にリフレッシュされるのですか、結果がフィードに入る前にトランザクションをコミットする必要がありますか?例えば

BEGIN TRANSACTION testTransaction 
INSERT INTO tbTableOne VALUES ('1', '2') 
SELECT * FROM vwIndexedView 
COMMIT TRANSACTION 

SELECT * FROM vwIndexedView 

最初のSELECTの結果は、第二とは異なるだろうか?

答えて

9

インデックスまたはインデックス付きビューは、更新を実行するDMLステートメントの一部として直ちに更新されます。あなたのケースでは、INSERTの実際の実行計画を分析すると、すべての物理的な 'パーティション'の更新のための演算子が含まれており、インデックス付きのビューはそのようなパーティションの1つです。

0

これは中央で競合するテーブルですか?トランザクションの挿入のためにそれをロックすることによって、あなたは他のスパイダーのトンを待つことになるでしょうか?

単純な答えは「はい」です。ビューは新しい値で更新されますが、これらの基になるテーブルに挿入する場所が他にもある場合は、考えなければならないパフォーマンスの頭痛が発生します。

2

インデックスされたビューが直ちに更新されます。実行計画を見て、自分で参照できます。これにより、多くのロック競合が発生します。be ready to drop your indexed view

関連する問題