创建非聚集索引
可以对表或索引视图创建多个非聚集索引。通常,创建非聚集索引是为了提高聚集索引未包含的常用查询的性能。
典型实现
可以通过下列方法实现非聚集索引:
- PRIMARY KEY 和 UNIQUE 约束
在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创建唯一聚集索引。主键列不允许空值。
在创建 UNIQUE 约束时,默认情况下将创建唯一非聚集索引,以便强制 UNIQUE 约束。如果不存在该表的聚集索引,则可以指定唯一聚集索引。有关详细信息,请参阅 PRIMARY KEY 约束和 UNIQUE 约束。 - 独立于约束的索引
默认情况下,如果未指定聚集,将创建非聚集索引。每个表可以创建的非聚集索引最多为 249 个,其中包括 PRIMARY KEY 或 UNIQUE 约束创建的任何索引,但不包括 XML 索引。 - 索引视图的非聚集索引
对视图创建唯一的聚集索引后,便可以创建非聚集索引。有关详细信息,请参阅创建索引视图。
具有包含性列的索引
当创建非聚集索引以包含某个查询时,可以在索引定义中包含非键列,以包含查询中未用作主搜索列的那些列。这样可以提高性能,因为查询优化器可以在索引中找到需要的所有列数据,而不用访问表或聚集索引。有关详细信息,请参阅具有包含性列的索引。
磁盘空间要求
有关非聚集索引的磁盘空间要求的信息,请参阅确定索引的磁盘空间要求。
性能注意事项
尽管在索引中包含查询使用的所有列这一点很重要,但要避免添加不必要的列。添加太多的索引列(键列或非键列)可能会导致下列性能后果:
- 一页上容纳的索引行减少,导致磁盘 I/O 增加,而缓冲效率降低。
- 需要更多的磁盘空间来存储索引。
- 索引维护可能增加对基础表或索引视图执行修改、插入、更新或删除等操作所需的时间。
您应确定查询性能的提高是否超过修改数据时对性能的影响,以及是否产生了额外的磁盘空间要求。有关评估查询性能的详细信息,请参阅查询优化。