index_option (Transact-SQL)

指定一组可应用于某个索引的选项,该索引是使用 ALTER TABLE 创建的约束定义的一部分。

主题链接图标Transact-SQL 语法约定

语法

{ 
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | SORT_IN_TEMPDB = { ON | OFF } 
  | ONLINE = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE |ROW | PAGE}
      [ ON PARTITIONS ( { <partition_number_expression> | <range> } 
            [ , ...n ] ) ]
}

<range> ::= 
<partition_number_expression> TO <partition_number_expression>

<single_partition_rebuild__option> ::=
{
    SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = {NONE | ROW | PAGE } }
}

参数

  • PAD_INDEX = { ON | OFF }
    指定索引填充。默认值为 OFF。

    • ON
      FILLFACTOR 指定的可用空间百分比应用于索引的中间级页。

    • OFF 或不指定 fillfactor
      考虑到中间级页上的键集,可以将中间级页几乎填满,但至少要为最大索引行留出足够空间。

  • FILLFACTOR **=**fillfactor
    指定一个百分比,指示在数据库引擎创建或修改索引的过程中,应将每个索引页面的叶级填充到什么程度。指定的值必须是 1 到 100 之间的整数。默认值为 0。

    注意注意

    填充系数值 0 和 100 在所有方面都是相同的。

  • IGNORE_DUP_KEY = { ON | OFF }
    指定在插入操作尝试向唯一索引插入重复键值时的错误响应。IGNORE_DUP_KEY 选项仅适用于创建或重新生成索引后发生的插入操作。当执行 CREATE INDEXALTER INDEXUPDATE 时,该选项无效。默认值为 OFF。

    • ON
      向唯一索引插入重复键值时将出现警告消息。只有违反唯一性约束的才会失败。

    • OFF
      向唯一索引插入重复键值时将出现错误消息。整个 INSERT 操作将被回滚。

    对于对视图创建的索引、非唯一索引、XML 索引、空间索引以及筛选的索引,IGNORE_DUP_KEY 不能设置为 ON。

    若要查看 IGNORE_DUP_KEY,请使用 sys.indexes

    在向后兼容的语法中,WITH IGNORE_DUP_KEY 等效于 WITH IGNORE_DUP_KEY = ON。

  • STATISTICS_NORECOMPUTE = { ON | OFF }
    指定是否重新计算统计信息。默认为 OFF。

    • ON
      不会自动重新计算过时的统计信息。

    • OFF
      启用统计信息自动更新功能。

  • ALLOW_ROW_LOCKS = { ON | OFF }
    指定是否允许行锁。默认值为 ON。

    • ON
      在访问索引时允许使用行锁。数据库引擎确定何时使用行锁。

    • OFF
      不使用行锁。

  • ALLOW_PAGE_LOCKS = { ON | OFF }
    指定是否允许页锁。默认值为 ON。

    • ON
      在访问索引时允许使用页锁。数据库引擎确定何时使用页锁。

    • OFF
      不使用页锁。

  • SORT_IN_TEMPDB = { ON | OFF }
    指定是否将排序结果存储在 tempdb 中。默认为 OFF。

    • ON
      tempdb 中存储用于生成索引的中间排序结果。如果 tempdb 与用户数据库不在同一组磁盘上,就可缩短创建索引所需的时间。但是,这会增加索引生成期间所使用的磁盘空间量。

    • OFF
      中间排序结果与索引存储在同一数据库中。

  • ONLINE = { ON | OFF }
    指定在索引操作期间基础表和关联的索引是否可用于查询和数据修改操作。默认为 OFF。

    注意注意

    不能联机创建唯一的非聚集索引。这包括由于 UNIQUE 或 PRIMARY KEY 约束而创建的索引。

    • ON
      在索引操作期间不持有长期表锁。在索引操作的主要阶段,源表上只使用意向共享 (IS) 锁。这使得能够继续对基础表和索引进行查询或更新。操作开始时,在很短的时间内对源对象持有共享 (S) 锁。操作结束时,如果创建非聚集索引,将在短期内获取对源的 S(共享)锁;当联机创建或删除聚集索引时,以及重新生成聚集或非聚集索引时,将在短期内获取 SCH-M(架构修改)锁。对本地临时表创建索引时,ONLINE 不能设置为 ON。

    • OFF
      在索引操作期间应用表锁。创建、重新生成或删除聚集索引或者重新生成或删除非聚集索引的脱机索引操作将对表获取架构修改 (Sch-M) 锁。这样可以防止所有用户在操作期间访问基础表。创建非聚集索引的脱机索引操作将对表获取共享 (S) 锁。这样可以防止更新基础表,但允许读操作(如 SELECT 语句)。

    有关详细信息,请参阅联机索引操作的工作方式。有关锁的详细信息,请参阅锁模式

    注意注意

    联机索引操作仅在 SQL Server Enterprise Edition、Developer Edition 和 Evaluation Edition 中可用。

  • MAXDOP **=**max_degree_of_parallelism
    在索引操作期间覆盖“最大并行度”配置选项。有关详细信息,请参阅 max degree of parallelism 选项。使用 MAXDOP 可以限制在并行计划执行过程中使用的处理器数量。最大数量为 64 个处理器。

    max_degree_of_parallelism 可以是:

    • 1
      取消生成并行计划。

    • >1
      将并行索引操作中使用的最大处理器数量限制为指定数量。

    • 0(默认值)
      根据当前系统工作负荷使用实际的处理器数量或更少数量的处理器。

    有关详细信息,请参阅配置并行索引操作

    注意注意

    并行索引操作仅在 SQL Server Enterprise Edition、Developer Edition 和 Evaluation Edition 中可用。

  • DATA_COMPRESSION
    为指定的表、分区号或分区范围指定数据压缩选项。选项如下所示:

    • NONE
      不压缩表或指定的分区。

    • ROW
      使用行压缩来压缩表或指定的分区。

    • PAGE
      使用页压缩来压缩表或指定的分区。

    有关压缩的详细信息,请参阅创建压缩表和索引

  • ON PARTITIONS ( { <partition_number_expression> | <range> } [ ,...n ] )
    指定对其应用 DATA_COMPRESSION 设置的分区。如果表未分区,则 ON PARTITIONS 参数将生成错误。如果不提供 ON PARTITIONS 子句,则 DATA_COMPRESSION 选项将应用于分区表的所有分区。

    可以按以下方式指定 <partition_number_expression>:

    • 提供一个分区号,例如:ON PARTITIONS (2)。

    • 提供若干单独分区的分区号并用逗号将它们隔开,例如:ON PARTITIONS (1, 5)。

    • 同时提供范围和单个分区,例如:ON PARTITIONS (2, 4, 6 TO 8)。

    <range> 可以指定为以单词 TO 隔开的分区号,例如:ON PARTITIONS (6 TO 8)。

    若要为不同分区设置不同的数据压缩类型,请多次指定 DATA_COMPRESSION 选项,例如:

    REBUILD WITH 
    (
    DATA_COMPRESSION = NONE ON PARTITIONS (1), 
    DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8), 
    DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
    )
    
  • <single_partition_rebuild__option>
    在大多数情况下,重新生成索引将重新生成已分区索引的所有分区。下面的选项在应用于单个分区时不会重新生成所有分区。

    • SORT_IN_TEMPDB

    • MAXDOP

    • DATA_COMPRESSION

注释

有关索引选项的完整说明,请参阅 CREATE INDEX (Transact-SQL)