为什么索引视图具体化?

Why does indexed view materialize?

如果我们为视图创建索引,我们 materialize 视图。

为什么视图在索引时具体化了?与非物化视图相反的含义是什么?

据我了解,物理上不存在正常视图。只存储它的定义,每个对视图的引用实际上都会重新执行视图定义。所以当我们通过视图插入时,我们直接插入到table。这是正确的吗 ?

如果视图被具体化,它将变成一个物理的 table 及其数据。那么在这种情况下,对基础 table 的修改是否不再在此视图中更新(已经具体化并且现在过着自己的生活)?

视图只是一个 select 语句,为了方便起见,可以保存并从中 select 编辑。 Inserting/updating 通过视图确实直接转到 table 执行其操作。

索引视图被存储、索引,就像table。

让我们考虑一下 table 和聚簇索引。当您选择集群键时,SQL 服务器会创建一棵 b 树,其叶子是实际数据。非聚集索引的工作方式相同,除了叶节点是代表您的聚集键的元组(因此您可以遍历聚集索引并返回实际数据)。

扩展示例,当您为视图建立索引时,首先需要提供聚集索引。您希望在 that 索引的叶子上生活什么?当然是数据! :) 并且视图上的任何非聚集索引的行为都与它们在物理 table.

上的类似物完全一样

关于您关于物化视图变得陈旧的问题,事实并非如此。也就是说,SQL 服务器知道视图依赖于 table(这就是为什么视图需要绑定模式,因此您不能删除其组成部分之一 table),因此,针对组成 table 的任何 DML 操作也会反映在 table 中。您可以通过创建索引视图然后查看对其中一个基础 table 进行简单更新的查询计划来说服自己相信这一点。您应该会看到索引视图的相应更新。