冗余索引?

时间:2017-07-26 12:07:39

标签: sql-server sql-server-2008 indexing

我注意到我正在处理的一个数据库中有一个奇怪的索引组合。

以下是表格设计:

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索引,可能会得到它。

我错过了什么吗?

此致

纳亚克

Index Design

Index Usage

1 个答案:

答案 0 :(得分:1)

有两个非常相似的非聚集索引有点奇怪,尽管它们可能都被平等使用。我也发现聚集索引是在非唯一字段上制作的,这一点非常奇怪。

查看以下链接以获取信息和免费工具以确定索引使用情况。我一直使用它来查看正在使用哪些索引等。

https://www.brentozar.com/blitzindex/

对于非聚集索引 - 您可以合并并删除未使用的索引,就好像您只是写入它们一样,这是对资源的皇家浪费。
对于聚集索引, 可能 会根据您使用闪电战索引工具的调查结果重新进行重做。