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

问题描述

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

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

解决方法

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

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

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

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

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

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

编辑:为了解其工作原理,sp_Blitz (Brent Ozar) 的开发者制作了一个名为 How to think like the SQL Server Engine 的精彩视频。我强烈推荐它 - 它使我对索引的理解达到了更高的水平。

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