2015-10-06 87 views
0

如果我们创建一个视图的索引,我们materialize的视图。为什么索引视图具体化?

为什么视图在索引时被物化?什么是意义而非非物化视图?

据我的理解,普通视图并不存在于物理上。只有其定义被存储,并且对视图的每个引用实际上都会再次执行视图定义。所以当我们通过视图插入时,我们直接插入表中。这是对的吗 ?

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

+1

https://technet.microsoft.com/zh-cn/library/ms187864(v=sql.105).aspx – Pred

回答

1

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

扩展示例,当您为视图编制索引时,首先需要提供一个聚集索引。你希望在的叶子上生活指数?数据当然! :)视图上的任何非聚集索引都将与物理表上的模拟行为完全相同。

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

0

视图只是一个保存的选择语句,可以从中进行选择,为了方便起见。通过视图插入/更新确实直接进入表中以执行其操作。

索引视图存储索引,就像一张表一样。

相关问题