为什么索引视图具体化?

时间:2015-10-06 15:15:25

标签: sql-server indexing view wiki indexed-view

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

为什么视图在编制索引时会实现?与非实体化观点相反,意义是什么?

根据我的理解,普通视图在物理上不存在。仅存储其定义,并且对视图的每个引用实际上都重新执行视图定义。因此,当我们通过视图插入时,我们直接插入表中。这是对的吗 ?

如果视图具体化,它将成为包含其数据的物理表。那么在这种情况下,对基表的修改是否会在此视图中更新(已经实现并且现在过着自己的生命)?

2 个答案:

答案 0 :(得分:1)

让我们考虑一个具有聚集索引的表一分钟。选择群集密钥时,SQL Server会创建一个b树,其中的叶子是实际数据。非聚集索引的工作方式相同,除了叶节点是表示聚类键的元组(因此您可以遍历聚簇索引并返回实际数据)。

扩展示例,在索引视图时,首先需要提供聚簇索引。您希望在 索引的叶子上生活什么?数据当然! :)并且视图上的任何非聚集索引的行为与物理表上的类似物完全相同。

关于物化视图变得陈旧的问题,它没有。也就是说,SQL Server知道视图依赖于表(这就是为什么视图需要是模式绑定的,因此你不能删除其中一个组成表),因此任何针对组成表的DML操作也会反映在桌子。您可以通过创建索引视图然后查看对其中一个基础表的简单更新的查询计划来说服自己。您应该看到索引视图的相应更新。

答案 1 :(得分:0)

视图只是一个保存的select语句,可以从中选择,以方便使用。通过视图插入/更新会直接进入表以执行其操作。

索引视图以表格形式存储,编入索引。