Indexaphobia:高价值缺失索引,但已经有双非聚集键

Indexaphobia: High Value Missing Index but has dual nonclustered key already

[dbo].[sp_BlitzIndex] 显示此 table 的 Indexaphobia: High Value Missing Index,但 table 在两列上都有非聚集索引。这还需要吗?

INEQUALITY:  [TeamId]  {int} INCLUDE:  [PlayerId]  {int} 

这是根据所提供的信息提出的建议 - 但需要确认

  • 您在 TeamID
  • 上有一个索引
  • 您在 PlayerId
  • 上还有另一个索引

如果是这种情况,我认为建议的索引需要一个索引中的两个字段。

如果它在两个索引中,查询将需要对 'join' 这两个索引进行大量读取。相反,如果它在一个索引中(例如,TeamID 上的索引,包括 PlayerID),那么它就不需要经过那个匹配过程。

我建议修改您在 TeamID 上的索引以也包括 PlayerID。它只是一个 int,所以不会增加太多大小。

尝试查找查看这些字段的查询也可能很有用,这样您就可以进行前后测试(可能是将 Teams 与 Players 连接起来的查询)。

编辑:为了了解这是如何工作的,sp_Blitz 的开发者 (Brent Ozar) 制作了一个很棒的视频,名为 How to think like the SQL Server Engine。我强烈推荐它 - 它使我对索引的理解更上一层楼。

Edit2:我建议尝试不仅将其作为 'include',而且将其作为索引中的第二个字段 - 这样它也会按 PlayerID 排序。另请注意,在重新阅读时,您的问题表明可以使用索引的查询可能是您在给定团队中寻找 not 球员的查询。