索引类型选项

使用 CREATE INDEX 语句的 DISTINCT 或 UNIQUE 和 CLUSTER 选项指定索引的特征。

索引类型选项
DISTINCT
指定索引所基于的列仅接受唯一数据。
UNIQUE
指定索引所基于的列仅接受唯一数据。
CLUSTER
按索引指定的顺序对表的行重新排序。

UNIQUE 或 DISTINCT 选项用法

如果您未指定 UNIQUE 或 DISTINCT 关键字,则该索引在被索引的列或者被索引的列集上允许重复的值。

带有唯一索引的列至多可有一个 NULL 值。

您不能为 UNIQUE 索引键指定 R-tree 辅助存取方法。

以下示例创建了一个唯一索引,防止 customer_num 列出现重复值:
CREATE UNIQUE INDEX c_num_ix ON customer (customer_num); 
DISTINCT 和 UNIQUE 关键字是同义词,所以以下语句与前面的示例具有相同的作用:
CREATE DISTINCT INDEX c_num_ix ON customer (customer_num); 

两个示例中的索引维持在升序中,这是缺省顺序。下一个示例在同一列上定义了一个名为 c_num_desc_ix 的唯一降序索引:

CREATE UNIQUE INDEX c_num_desc_ix ON customer (customer_num DESC); 

您也可以通过创建带有 CREATE TABLE 的唯一约束或 ALTER TABLE 语句 的 ADD CONSTRAINT 子句来阻止列或列组中的复制。

在一个 NLSCASE INSENSITIVE 数据库中,NCHAR 和 NVARCHAR 数据类型列上的索引忽视字母大小写差异,以致于数据库服务器将由相同字母序列组成的不同大小写的字符串视为重复值。如果新行中列值与同一表中现有行同一列的值的不同之处仅在于大小写,则您不能向具有 NCHAR 或 NVARCHAR 列并在其列定义了唯一约束或唯一索引的表中插入行或更改该表的行。有关带有 NLSCASE INSENSITIVE 属性的数据库的更多信息,请参阅 在 NLSCASE INSENSITIVE 数据库中重复的行在区分大小写的数据库中的 NCHAR 和 NVARCHAR 表达式

CLUSTER 选项用法

您不能在同一语句中同时指定 CLUSTER 选项和 ONLINE 关键字。此外,一些辅助存取方法(如 R-tree )不支持集群。在您为索引指定 CLUSTER 之前,请确保它使用支持集群的存取方法。

如果同一表上已存在 CLUSTER 索引,则 CREATE CLUSTER INDEX 语句失败。
CREATE CLUSTER INDEX c_clust_ix ON customer (zipcode); 

该语句在 customer 表上创建了一个索引,并按行的邮政编码对行做物理的升序(缺省的)排序。

如果指定了 CLUSTER 选项并且数据中存在分片,则仅在每个分片内集群数据值,而非在整个表全局集群数据值。

如果 CREATE CLUSTER INDEX 语句还包含 COMPRESSED 关键字作为存储选项,则数据服务器发出错误 -26950 。要创建支持压缩的聚簇索引,需要两步:
  • 使用 CREATE CLUSTER INDEX 语句定义不带索引压缩的集群索引。
  • 调用带有 'index compress' 参数的 SQL 管理 API task( )admin( ) 函数压缩现有的聚簇索引。

您不能在树索引的集群中使用 CLUSTER 选项。