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 的查询更快?
在这种情况下,非聚集索引本质上是主键*的副本。它会占用额外的空间并使插入/更新/删除变慢,但不会增加任何好处。
原因是可以通过在列上查找来回答的任何查询都可以a
在主键上执行该查找,并且不需要非聚集索引。
但是,如果你的实际的表已经超越了许多额外的列a
,b
和c
(例如,让我们说还有其他100列也一样),它可能是在非聚集索引可以提高,仅使用查询a
,b
和c
。在这种情况下,它将提供一个较小的数据结构,可用于仅访问这三列。这是否值得维护索引的成本取决于您的工作量。
* 这里的主键是聚集索引,正如 Max Vernon 指出的那样,聚集索引是表。因此,另一种说法是您的非聚集索引正在复制整个表。