创建非聚集索引

可以对表或索引视图创建多个非聚集索引。通常,创建非聚集索引是为了提高聚集索引未包含的常用查询的性能。

典型实现

可以通过下列方法实现非聚集索引:

  • PRIMARY KEY 和 UNIQUE 约束
    在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创建唯一聚集索引。主键列不允许空值。
    在创建 UNIQUE 约束时,默认情况下将创建唯一非聚集索引,以便强制 UNIQUE 约束。如果不存在该表的聚集索引,则可以指定唯一聚集索引。有关详细信息,请参阅 PRIMARY KEY 约束UNIQUE 约束
  • 独立于约束的索引
    默认情况下,如果未指定聚集,将创建非聚集索引。每个表可以创建的非聚集索引最多为 249 个,其中包括 PRIMARY KEY 或 UNIQUE 约束创建的任何索引,但不包括 XML 索引。
  • 索引视图的非聚集索引
    对视图创建唯一的聚集索引后,便可以创建非聚集索引。有关详细信息,请参阅创建索引视图

具有包含性列的索引

当创建非聚集索引以包含某个查询时,可以在索引定义中包含非键列,以包含查询中未用作主搜索列的那些列。这样可以提高性能,因为查询优化器可以在索引中找到需要的所有列数据,而不用访问表或聚集索引。有关详细信息,请参阅具有包含性列的索引

磁盘空间要求

有关非聚集索引的磁盘空间要求的信息,请参阅确定索引的磁盘空间要求

性能注意事项

尽管在索引中包含查询使用的所有列这一点很重要,但要避免添加不必要的列。添加太多的索引列(键列或非键列)可能会导致下列性能后果:

  • 一页上容纳的索引行减少,导致磁盘 I/O 增加,而缓冲效率降低。
  • 需要更多的磁盘空间来存储索引。
  • 索引维护可能增加对基础表或索引视图执行修改、插入、更新或删除等操作所需的时间。

您应确定查询性能的提高是否超过修改数据时对性能的影响,以及是否产生了额外的磁盘空间要求。有关评估查询性能的详细信息,请参阅查询优化

在创建表时创建 PRIMARY KEY 或 UNIQUE 约束

CREATE TABLE (Transact-SQL)

对现有表创建 PRIMARY KEY 或 UNIQUE 约束

ALTER TABLE (Transact-SQL)

创建索引

CREATE INDEX (Transact-SQL)

请参阅

概念

创建索引(数据库引擎)
非聚集索引设计指南

帮助和信息

获取 SQL Server 2005 帮助