pie*_*rs7 7 sql-server materialized-view sql-server-2012
我正在使用 SQL Server 索引视图来提高连接的性能,该连接按小表上的类别过滤(非常)大的表。例如:
CREATE VIEW BigTableSubset WITH SCHEMABINDING
AS
SELECT b.ID, b.SomeValue from BigTable b
INNER JOIN SmallTable s on (b.CategoryFK = s.CategoryPK)
where s.Type = 'Blah'
CREATE UNIQUE CLUSTERED INDEX PK_BigTableSubset ON BigTableSubset
(ID)
INCLUDE (SomeValue)
Run Code Online (Sandbox Code Playgroud)
(BigTable.ID是BigTable上的PK)
查询性能大大增加(因为需要Bigtable中的子集已经存储),但我会确保SQL可以更新索引本身在最优化的方式时,无论是源表进行更新。
所以问题是:我是否需要在视图的聚集索引中包含 SmallTable.CategoryPK 以确保这一点,或者 SQL 是否会作为索引结构的一部分自动执行此操作?或者换句话说,每次“左手”(SmallTable)表更新时,SQL 如何识别索引中的哪些页面需要更新,我是否需要做任何事情来促进这一点?
当源表发生变化时,SQL Server 将始终能够自动更新视图的索引;您不需要做任何额外的事情。
您可以检查修改源表之一的查询计划,您将看到有额外的运算符来更新视图的索引,就像数据更改时更新源表上所有适用的非聚集索引一样。
归档时间: |
|
查看次数: |
156 次 |
最近记录: |