我注意到我正在处理的一个数据库中有一个奇怪的索引组合。
以下是表格设计:
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是标识并定义为主键。
在列上定义了聚簇索引 - AnotherId,此列不是唯一的。 在AnotherId上定义了另外两个非聚簇索引,其他包括列
我的观点是,AnotherId上的任何非聚簇索引都是冗余的(idx2和idx3),因为表的主副本(culstred index)具有相同的数据。
当我检查索引使用情况时,我希望看到idx2和idx3没有使用,但idx3的搜索索引最高。
我已经提供了索引设计和用法的截图
我的问题是 - 这些非聚集索引 - 不是idx2和idx3吗?优化程序可以从聚集索引中获取相同的数据 - idx1。如果没有定义NC索引,可能会得到它。
我错过了什么吗?
此致
纳亚克
答案 0 :(得分:1)
有两个非常相似的非聚集索引有点奇怪,尽管它们可能都被平等使用。我也发现聚集索引是在非唯一字段上制作的,这一点非常奇怪。
查看以下链接以获取信息和免费工具以确定索引使用情况。我一直使用它来查看正在使用哪些索引等。
https://www.brentozar.com/blitzindex/
对于非聚集索引 - 您可以合并并删除未使用的索引,就好像您只是写入它们一样,这是对资源的皇家浪费。
对于聚集索引, 可能 会根据您使用闪电战索引工具的调查结果重新进行重做。