5

2つのテーブルtbTableOnetbTableTwoから読み取るSQLServerインデックスビューvwIndexedViewがあるとします。

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

例えば:

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

SELECT * FROM vwIndexedView

最初のSELECTの結果は2番目のSELECTとは異なりますか?

4

3 に答える 3

11

インデックスまたはインデックス付きビューは、更新を実行するDMLステートメントの一部としてすぐに更新されます。あなたの場合、INSERTの実際の実行プランを分析すると、すべての物理的な「パーティション」を更新するための演算子が含まれていることがわかります。インデックス付きビューはそのようなパーティションの1つです。

于 2009-07-06T21:52:34.397 に答える
2

インデックス付きビューはすぐに更新されます。実行プランを確認して、自分の目で確かめることができます。これにより、多くのロック競合が発生します。インデックス付きビューを削除する準備をしてください

于 2009-07-06T22:02:50.023 に答える
0

これは中央で争われているテーブルですか?IEは、トランザクションの挿入のためにロックすることで、他の多くのspidを待機させますか?

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

于 2009-07-06T21:52:11.497 に答える