索引视图(Indexed View,具有索引的物化视图)是一个视图(VIEW),它创建了一个聚集唯一索引。这使得可以将查询结果物理地存储在磁盘上,并利用索引加快访问速度。
优点:
限制:
TEXT、NTEXT、IMAGE 数据类型,某些函数)。CREATE VIEW dbo.SalesSummary WITH SCHEMABINDING AS SELECT SalesPersonID, COUNT_BIG(*) AS SalesCount, SUM(TotalDue) AS TotalDue FROM dbo.Sales GROUP BY SalesPersonID; GO CREATE UNIQUE CLUSTERED INDEX idx_SalesSummary ON dbo.SalesSummary (SalesPersonID);
问:所有视图是否都可以创建索引(聚集的)?
**答:**不可以,只有完全符合限制的视图(例如,没有外部引用,聚合函数一致等)才能被索引。否则,创建索引的请求将返回错误。
故事
在一个真实的银行系统项目中,需要加快对聚合报告的查询。创建了一个索引视图,但没有分析对表更新的负载。在大量插入操作中,主表的性能由于更新视图索引的显著开销而急剧下降。
故事
专家错误认为可以对具有外部表连接和 GETDATE() 函数的视图进行索引。创建索引的请求导致错误:“无法在包含非确定性函数的视图上创建索引”。为修复设计架构耗费了一整天。
故事
在一个大型电子商务项目中,基础表“Products”的数据更新导致了锁定的出现。原因是当存在大量索引视图时,事务管理不当,聚合影响了数百万行数据。