【问题标题】:Do Indexed Views Update During a Transaction?索引视图是否在事务期间更新?
【发布时间】:2010-11-08 12:39:56
【问题描述】:

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

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

例如:

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

SELECT * FROM vwIndexedView

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

【问题讨论】:

    标签: sql sql-server transactions indexed-view


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2014-11-22
          • 1970-01-01
          • 2012-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-24
          • 1970-01-01
          相关资源
          最近更新 更多