小编pie*_*rs7的帖子

需要在 SQL 索引视图聚集索引中包含 FK?

我正在使用 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 materialized-view sql-server-2012

7
推荐指数
1
解决办法
156
查看次数