0

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

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

1 回答 1

1

这是基于提供的信息的建议 - 但要确认

  • 你有一个索引TeamID
  • 你有另一个索引PlayerId

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

如果它在两个索引中,则查询需要进行大量读取才能“加入”两个索引。相反,如果它在一个索引中(例如,TeamID 上的索引,包括 PlayerID),那么它就不需要经过那个匹配过程。

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

尝试查找查看这些字段的查询也可能很有用,这样您就可以在前后进行测试(可能是加入 Teams with Players 的查询)。

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

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

于 2021-04-23T09:41:57.943 回答