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