代码之家  ›  专栏  ›  技术社区  ›  Peder Rice

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

  •  5
  • Peder Rice  · 技术社区  · 16 年前

    假设我有一个SQL Server索引视图, 维温德沃德维尤 从两个表中读取, 丁苯酮 TBTABLE .

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

    例如:

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

    第一次选择的结果与第二次选择的结果不同吗?

    3 回复  |  直到 16 年前
        1
  •  10
  •   Remus Rusanu    16 年前

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

        2
  •  2
  •   A-K    16 年前

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

        3
  •  0
  •   Will Charczuk    16 年前

    这是一个中央竞争的桌子吗?也就是说,通过为事务中的插入而锁定它,您是否会导致大量其他SPID等待?

    简单的答案是“是”,视图将更新为新的值,但如果有其他地方插入这些基础表中,这会造成一些您应该考虑的性能问题。