索引视图何时更新?

时间:2014-05-07 13:31:42

标签: sql-server indexed-view

我正在使用SQL Server 2000,我犹豫是否开始使用索引视图(我有一个具有日常性能值的表,我需要使用许多数学函数对它们进行评分)。

如果我创建一个索引视图(使用我的性能表),然后我在我的性能表中添加一个新行,我的视图索引是立即更新的,还是在视图上的第一个用户请求时更新?

1 个答案:

答案 0 :(得分:4)

索引视图会自动维护,作为影响它们所基于的基表的查询的一部分。

这就是为什么对索引视图中的内容有如此多的限制 - 存在限制,以便可以仅根据基表中受影响的行更新视图,而不是(可能)必须重新生成-scan整个表以确定视图现在应包含哪些行。


您还可以通过检查INSERT的查询计划来查看以下查询:

create table dbo.T (ID int not null)
go
create view dbo.V 
with schemabinding
as
    select ID from dbo.T
go
create unique clustered index I on dbo.V(ID)
go
insert into T(ID) values (1)

insert into T(ID) values (1)的计划是:

enter image description here

如您所见,该计划在视图I上包含对索引V的插入。


以上是在SQL Server的新版本上完成的,而不是2000版本(我没有让不受支持的版本潜伏),但这是一直有效的方式。即使回到documentation的2000版本,也提到了这个限制:

  

创建聚簇索引后,尝试修改视图基础数据的任何连接也必须具有创建索引所需的相同选项设置。如果执行语句的连接没有正确的选项设置,SQL Server会生成错误并回滚将影响视图结果集的任何INSERTUPDATEDELETE语句

如果视图仅在访问时更新,则不需要存在此限制。