索引如何处理视图?

时间:2009-11-12 10:59:57

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

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

3 个答案:

答案 0 :(得分:10)

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

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

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

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

答案 1 :(得分:6)

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

  

在a上创建唯一的聚簇索引   视图提高了查询性能   因为视图存储在   数据库与表一样的方式   存储聚集索引。

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

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

答案 2 :(得分:6)

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

添加索引并且它在物理上存在(持久化),因此优化器会考虑使用它。那不是宏观。

我确信Oracle称他们为“物化视图”,这是一个更好的名称。

相关的FYI:计算列有一个PERSISTED选项,可以执行相同的操作......