2009-10-06 75 views

回答

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

我不得不引用一些課程筆記以獲得正確的答案,我記得索引視圖包含行數,並根據基礎表中的更改更新預聚合的數據。 (就像一個正常的索引。)

它具體包含的總和和計數,以便它可以處理插入/更新和刪除。 (調整總和和計數然後表示結果)。通過這種方式,視圖可以輸出平均值(總和/計數),但不會存儲平均值,因爲它無法根據新數據對其進行調整。

據我所知,索引視圖的存儲方式與普通索引相同,使用B-Tree,數據頁,並擁有自己的IAM。

這就是我所記得的我的頭頂。