重叠索引或子集

时间:2016-09-29 14:24:16

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

我有一个Index_01,它是INDEX_02的子集

CREATE NONCLUSTERED INDEX [Index01] ON [Tab1](
colA,colB,colC)
INCLUDE ( colD,colE,colF) 

CREATE NONCLUSTERED INDEX [Index02] ON [Tab1](
    colE,
    colF,
    colC,
    colD,
    colA,
    colC)
INCLUDE (colB,colZ) 

由于Index01是Index02的子集,我们可以删除Index01吗? Index_01和Index_02是否相同?

提前致谢。

1 个答案:

答案 0 :(得分:0)

SQL Server根据定义索引的列构建B-Tree Plus。 Index01基于列colA,colB和colC构建。 Index02的B-Tree构建基于colE,colF,colC,colD,colA,colCT构建。它们是非常不同的索引。

即使Index01包含colD,colE,colF,这意味着当找到基于colA,colB,colC的匹配时,如果查询只需要在列colD,colE,colF中找到的数据,则SQL Server不需要更进一步,进入数据 - 它有索引中的信息,然后它可以返回。