我注意到我正在处理的一个数据库中有一个奇怪的索引组合。
下面是表格的设计:
CREATE TABLE tblABC
(
id INT NOT NULL IDENTITY(1,1),
AnotherId INT NOT NULL, --not unique column
Othercolumn1 INT,
OtherColumn2 VARCHAR(10),
OtherColumn3 DATETIME,
OtherColumn4 DECIMAL(14, 4),
OtherColumn5 INT,
CONSTRAINT idxPKNCU
PRIMARY KEY NONCLUSTERED (id)
)
CREATE CLUSTERED INDEX idx1
ON tblABC(AnotherId ASC)
CREATE NONCLUSTERED INDEX idx2
ON tblABC(AnotherId ASC) INCLUDE(OtherColumn4)
CREATE NONCLUSTERED INDEX idx3
ON tblABC (AnotherId) INCLUDE (OtherColumn2, OtherColumn4)
请注意,列id是标识,并定义为主键。
在column - AnotherId上定义了聚集索引,此列不是唯一的。在AnotherId上还定义了两个附加的非聚集索引,以及附加的include列
我的观点是,AnotherId上的任何一个非聚集索引(idx2和idx3)都是冗余的,因为表的主副本(区域性索引)具有相同的数据。
当我检查索引使用情况时,我预计在idx2和idx3上看不到任何使用情况,但idx3有最高的索引查找。
我已经给出了索引设计和使用的截图
我的问题是- idx2和idx3这些非聚集索引不是冗余的吗?优化器可以从聚集索引idx1中获得相同的数据。如果没有定义NC索引,它可能已经得到了它。
我是不是遗漏了什么?
致以敬意,
纳亚克
发布于 2017-07-26 13:21:15
有两个非常相似的非聚集索引有点奇怪,尽管它们可能被同等地使用。我还发现非常奇怪的是,聚集索引是在一个非唯一字段上创建的。
请查看以下链接以获取信息和确定索引使用情况的免费工具。我一直使用它来查看使用了哪些索引,等等。
https://www.brentozar.com/blitzindex/
对于非聚集索引-您可以合并并删除未使用的索引,就像您只对它们进行写入一样,这是对资源的严重浪费。
对于聚集索引,您可以使用闪电式索引工具( index tool )考虑根据您的发现重做一次。
https://stackoverflow.com/questions/45326555
复制