问题描述
我正在运行 Brent Ozar 的 sp_BlitzIndex 并获得一些此类项目。
Multiple Index Personalities: Borderline duplicate keys
我不是 100% 知道该做什么,但下面是一个示例。
CREATE INDEX [IX_Test] ON [Test] ( [SportId] ) WITH (FILLFACTOR=100,ONLINE=?,SORT_IN_TEMPDB=?,DATA_COMPRESSION=?);
CREATE UNIQUE INDEX [IX_Test_2] ON [Test] ( [SportId],[AnotherId] ) WITH (FILLFACTOR=100,DATA_COMPRESSION=?);
如您所见,它们看起来很相似。我的问题是删除第一个索引 SportID 但保留双索引 (SportId,TextId) 是否有害。
解决方法
第一个索引 IX_Test 是冗余的,因为它的第一个最具选择性的列被索引 IX_Test_2 复制。
这两个索引都可以满足按键或范围查找特定行的 SportId,第二个索引还包括一个额外的列,因此涵盖了需要两者或按 AnotherId 排序的查询。
在没有第一个索引的情况下,优化器可以同样好地利用第二个索引,并且添加单个 int 列,同时使索引稍微更宽,将可以忽略不计,并且被减少的开销所抵消保持两者。