SQL Server视图索引如何在底层工作?

时间:2009-10-06 18:23:15

标签: sql sql-server performance tsql

SQL Server查看索引如何在幕后工作?我已经阅读了这个TechNet article,但它没有解释视图索引实际上是如何工作的。任何人都可以向我解释这个吗?

注意:我不确定这是否应该用于SF。如果它应该,只需将它移到那里。

2 个答案:

答案 0 :(得分:3)

在查询编译期间,SQL编译器将在元数据中看到索引视图定义,并将生成执行计划,以维护索引视图数据以及表。例如:

create table foo (a int not null,
   constraint pkfoo primary key (a))
GO

create view vFoo 
with schemabinding
as
select a from dbo.foo
GO

create unique clustered index cdxvFoo on vFoo(a)
GO

insert into foo (a) values (1);
GO

如果查看INSERT语句的执行计划,您会看到它包含两个聚簇索引插入,一个插入到foo.pkFoo中,一个插入到vFoo.cdxvFoo中。与任何删除或更新类似。

答案 1 :(得分:1)

我必须参考一些课程笔记才能得到正确答案,我记得索引视图包含行数,并根据基础表中的更改更新预聚合数据。 (就像普通的索引一样。)

它特别包含总和和计数,以便它可以处理插入/更新和删除。 (调整总和,然后计数表示结果)。这样一个视图可以输出平均值(总和/计数)但不存储平均值,因为它无法从新数据中调整它。

据我所知,索引视图与普通索引的存储方式相同,使用B-Tree,数据页并拥有自己的IAM。

这就是我记得的一切。