RetailerID, PurchaseDate, UserID
假设我在 ( )上聚集一个表。这就是“聚集键”,聚集键总是包含在所有非聚集索引中。
https://stackoverflow.com/a/23057196/88409
https://stackoverflow.com/a/2747869/88409
接下来,我创建了一个以 ( ) 为键的非聚集索引“StorePurchasesIndex” RetailerID, StoreID, PurchaseDate
,以使仅包含特定商店子集的查找速度更快。
第一个问题是,我是否需要显式包含UserID
作为包含列,或者它是否会由于包含它的集群键而隐含地存在?我很确定在这种情况下我不需要UserID
明确包含,但如果我错了,请纠正我。
我真正感兴趣的是,如果我明确地将其包含UserID
为包含列会发生什么。它是否会冗余地包含在索引中,一次作为集群键的一部分,然后再次作为包含的列?或者 SQL Server 是否识别意图并避免将其存储两次,因为它已经通过集群键包含在内?
第二个问题是,如果不包含冗余,那么明确包含它是否有好处。例如,它UserID
是否会确保将来包含在内,即使集群键以排除的方式发生变化UserID
并重建索引?