多重索引个性:边界重复键

问题描述

我正在运行 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 列,同时使索引稍微更宽,将可以忽略不计,并且被减少的开销所抵消保持两者。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...