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 球员的查询。
[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 球员的查询。