我正在使用SQL Server 2000,我毫不猶豫地開始使用索引視圖(我有一個包含日常性能值的表,我需要用許多數學函數對它們進行評分)。何時更新索引視圖?
如果我創建一個索引視圖(使用我的性能表),然後在我的性能表中添加一個新行,我的視圖索引立即更新,還是在視圖的第一個用戶resquest上更新?
我正在使用SQL Server 2000,我毫不猶豫地開始使用索引視圖(我有一個包含日常性能值的表,我需要用許多數學函數對它們進行評分)。何時更新索引視圖?
如果我創建一個索引視圖(使用我的性能表),然後在我的性能表中添加一個新行,我的視圖索引立即更新,還是在視圖的第一個用戶resquest上更新?
索引視圖作爲影響它們所基於的基表的查詢的一部分被自動維護。
這就是爲什麼在索引視圖中可以擁有如此多的限制 - 存在限制,以便可以根據基表中受影響的行更新視圖,而不是(可能)必須重新掃描整個表以確定視圖現在應包含哪些行。
您也可以通過檢查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)
的計劃是:
凡爲你可以看到,該計劃包括一個插入索引I
的視圖V
。
的上面的SQL Server 2000的新版本做了(我不保持不受支持的版本虎視眈眈),但正是這些一直工作方式。甚至早在2000版的documentation的,這種限制中提到:
創建聚集索引後,試圖修改該視圖的基礎數據的任何連接也必須具有創建所需的相同的選項設置指數。如果執行語句的連接沒有正確的選項設置,則SQL Server會生成錯誤並回滾任何影響結果集視圖結果集的任何
INSERT
,UPDATE
或DELETE
語句。
如果視圖僅在訪問時更新,則不需要此限制存在。