使用 include 创建索引聚集 X NonClustered

1 sql-server optimization t-sql index-tuning

我有一张像:

create table x (a varchar(20),
b varchar(30),
c varchar(30),
primary key clustered(a asc))
Run Code Online (Sandbox Code Playgroud)

所以我想知道我是否创建了一个像这样的索引:

Create nonclustered index test on x(a) include (b,c)
Run Code Online (Sandbox Code Playgroud)

该索引将使我使用列 a、b、c 的查询更快?

Geo*_*son 9

在这种情况下,非聚集索引本质上是主键*的副本。它会占用额外的空间并使插入/更新/删除变慢,但不会增加任何好处。

原因是可以通过在列上查找来回答的任何查询都可以a在主键上执行该查找,并且不需要非聚集索引。

但是,如果你的实际的表已经超越了许多额外的列abc(例如,让我们说还有其他100列也一样),它可能是在非聚集索引可以提高,仅使用查询abc。在这种情况下,它将提供一个较小的数据结构,可用于仅访问这三列。这是否值得维护索引的成本取决于您的工作量。


* 这里的主键是聚集索引,正如 Max Vernon 指出的那样,聚集索引表。因此,另一种说法是您的非聚集索引正在复制整个表。