17

有人可以用简单的英语向我解释一下视图索引是如何工作的吗?我对表上的索引有一个相当简单的理解;索引视图的工作方式与让基础表上的索引自然地做他们的事情有何不同?

4

3 回答 3

10

假设您有一个将表限制为某些行的视图:

create view dbo.vw_HotProducts
as
select * from dbo.Products where Hot = 1

现在,如果您在此视图上创建索引,则该索引仅包含热门产品。您可以将其与将视图的结果存储在临时表中进行比较。这对于具有多个连接的复杂查询非常有用;基本上他们的输出被缓存了。

索引视图的最大缺点是每次基础表数据更改时都会重新创建它们。这将索引视图的使用限制在不经常更改的数据上,通常是在数据仓库或商业智能环境中。

于 2009-11-12T11:03:18.757 回答
6

请参阅http://msdn.microsoft.com/en-us/library/aa258260(SQL.80).aspx

在视图上创建唯一聚集索引可以提高查询性能,因为视图在数据库中的存储方式与具有聚集索引的表的存储方式相同。

视图从正确的视图转换为表格。视图定义用于更新此表。

Oracle 将这些称为“物化视图”。

于 2009-11-12T11:04:47.647 回答
6

视图本身不是真实的或“持久的”,并且没有性能优势。它只是一个扩展的宏。

添加一个索引并且它物理存在(持久化),所以优化器会考虑使用它。那就不是宏了。

我确信甲骨文称它们为“物化视图”,这是一个更好的名字。

一个相关的 FYI:计算列有一个 PERSISTED 选项,它做同样的事情......

于 2009-11-12T13:12:22.033 回答