创建聚集索引

可以使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2012 中创建表的聚集索引。 除了个别表之外,每个表都应该有聚集索引。 聚集索引除了可以提高查询性能之外,还可以按需重新生成或重新组织来控制表碎片。 也可以对视图创建聚集索引。 (聚集索引在描述的聚集索引和非聚集索引主题中定义。)

本主题内容

  • 开始之前:

    典型实现

    限制和局限

    安全性

  • 若要创建表的聚集索引,请使用:

    SQL Server Management Studio

    Transact-SQL

开始之前

典型实现

聚集索引按下列方式实现:

  • PRIMARY KEY 和 UNIQUE 约束

    在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创建唯一聚集索引。 主键列不允许空值。

    在创建 UNIQUE 约束时,默认情况下将创建唯一非聚集索引,以便强制 UNIQUE 约束。 如果不存在该表的聚集索引,则可以指定唯一聚集索引。

    将索引创建为约束的一部分后,会自动将索引命名为与约束名称相同的名称。 有关详细信息,请参阅主键和外键约束唯一约束和 CHECK 约束

  • 独立于约束的索引

    指定非聚集主键约束后,您可以对非主键列的列创建聚集索引。

限制和局限

  • 创建聚集索引结构后,旧(源)结构和新(目标)结构的各自的文件和文件组都需要磁盘空间。 在完成事务提交后,才会释放旧结构。 排序也需要其他临时磁盘空间。 有关详细信息,请参阅索引 DDL 操作的磁盘空间要求

  • 如果对具有多个现有非聚集索引的堆创建聚集索引,则必须重新生成所有非聚集索引,以使它们包含聚集键值而非行标识符 (RID)。 同样,如果删除具有多个非聚集索引的表的聚集索引,在 DROP 操作过程中,将重新生成非聚集索引。 对于大型表,这可能需要很长时间。

    对大型表创建索引的首选方法是先创建聚集索引,然后创建任何非聚集索引。 在对现有表创建索引时,请考虑将 ONLINE 选项设置为 ON。 如果设置为 ON,则不会持有长期表锁。 这使对基础表的查询或更新可以继续进行。 有关详细信息,请参阅联机执行索引操作

  • 聚集索引的索引键不能包含在 ROW_OVERFLOW_DATA 分配单元中具有现有数据的 varchar 列。 如果对 varchar 列创建了聚集索引,并且在 IN_ROW_DATA 分配单元中存在现有数据,则对该列执行的将数据推送到行外的后续插入或更新操作将会失败。 若要获取有关可能包含行溢出数据的表的信息,请使用 sys.dm_db_index_physical_stats (Transact-SQL) 动态管理函数。

安全性

权限

要求对表或视图具有 ALTER 权限。 用户必须是 sysadmin 固定服务器角色的成员,或者是 db_ddladmindb_owner 固定数据库角色的成员。

用于“返回首页”链接的箭头图标[Top]

使用 SQL Server Management Studio

使用对象资源管理器创建聚集索引

  1. 在“对象资源管理器”中,展开要创建聚集索引的表。

  2. 右键单击**“索引”文件夹,指向“新建索引”,然后选择“聚集索引…”**。

  3. 在**“新建索引”对话框的“常规”页中,在“索引名称”**框中输入新索引的名称。

  4. 在**“索引键列”下,单击“添加…”**。

  5. 在**“从 table_name 中选择列”**对话框中,选中要添加到聚集索引的表列的复选框。

  6. 单击**“确定”**。

  7. 在**“新建列”对话框中,单击“确定”**。

使用表设计器创建聚集索引

  1. 在“对象资源管理器”中,展开要使用聚集索引创建表的数据库。

  2. 右键单击**“表”文件夹,然后单击“新建表…”**。

  3. 按常规方式创建新表。 有关详细信息,请参阅创建表(数据库引擎)

  4. 右键单击上面创建的新表,然后单击**“设计”**。

  5. 在**“表设计器”菜单上,单击“索引/键”**。

  6. 在**“索引/键”对话框中,单击“添加”**。

  7. 从**“选定的主/唯一键或索引”**文本框中选择新索引。

  8. 在网格中,选择**“创建为聚集的”,然后从该属性右侧的下拉列表中选择“是”**。

  9. 单击**“关闭”**。

  10. 在**“文件”菜单上,单击“保存 table_name”**。

用于“返回首页”链接的箭头图标[Top]

使用 Transact-SQL

创建聚集索引

  1. 在**“对象资源管理器”**中,连接到数据库引擎实例。

  2. 在标准菜单栏上,单击**“新建查询”**。

  3. 将以下示例复制并粘贴到查询窗口中,然后单击**“执行”**。

    USE AdventureWorks2012;
    GO
    -- Create a new table with three columns.
    CREATE TABLE dbo.TestTable
        (TestCol1 int NOT NULL,
         TestCol2 nchar(10) NULL,
         TestCol3 nvarchar(50) NULL);
    GO
    -- Create a clustered index called IX_TestTable_TestCol1
    -- on the dbo.TestTable table using the TestCol1 column.
    CREATE CLUSTERED INDEX IX_TestTable_TestCol1 
        ON dbo.TestTable (TestCol1); 
    GO
    

有关详细信息,请参阅 CREATE INDEX (Transact-SQL)

用于“返回首页”链接的箭头图标[Top]

请参阅

概念

创建主键

创建唯一约束