在事务期间,索引视图是否更新?

时间:2009-07-06 21:38:04

标签: sql sql-server transactions indexed-view

假设我有一个SQL Server索引视图 vwIndexedView ,它可以从两个表中读取, tbTableOne tbTableTwo 。< / p>

如果我在事务中的两个表之一上执行操作,我的索引视图会发生什么?它会立即刷新,还是我必须在结果输入之前提交我的交易?

例如:

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

SELECT * FROM vwIndexedView

第一个SELECT的结果是否与第二个结果不同?

3 个答案:

答案 0 :(得分:10)

索引或索引视图会立即更新,作为执行更新的DML语句的一部分。在您的情况下,如果您分析INSERT的实际执行计划,您将看到它包含用于更新所有物理“分区”的运算符,并且您的索引视图就是这样的分区之一。

答案 1 :(得分:2)

索引视图立即刷新,您可以查看执行计划并亲自查看。这会导致很多锁争用:be ready to drop your indexed view

答案 2 :(得分:0)

这是一个集中竞争的表吗? I.E通过锁定交易中的插入物你会导致大量其他spid等待吗?

简单的答案是肯定的,视图将使用新值进行更新,但如果您从其他地方插入这些基础表,则会产生一些您应该考虑的性能问题。