5

假设我有一个 SQL Server 索引视图vwIndexedView,它从两个表tbTableOnetbTableTwo中读取。

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

例如:

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

SELECT * FROM vwIndexedView

第一个 SELECT 的结果会与第二个不同吗?

4

3 回答 3

11

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

于 2009-07-06T21:52:34.397 回答
2

索引视图立即刷新,您可以查看执行计划并亲自查看。这会导致很多锁争用:准备好删除索引视图

于 2009-07-06T22:02:50.023 回答
0

这是一个集中竞争的桌子吗?IE 通过将其锁定为事务中的插入,您是否会导致大量其他 spid 等待?

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

于 2009-07-06T21:52:11.497 回答