创建非聚集索引

可以使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2014 中创建非聚集索引。 非聚集索引是一种索引结构,与存储在表中的数据分开,该索引对一个或多个所选列进行重新排序。 非聚集索引通常比搜索基础表更快地查找数据;查询有时可以完全由非聚集索引中的数据回答,或者非聚集索引可以将数据库引擎指向基础表中的行。 通常,会创建非聚集索引以提高聚集索引未涵盖的常用查询的性能,或查找表中没有聚集索引的行(称为堆)。 可以对表或索引视图创建多个非聚集索引。

本主题内容

在您开始之前

典型实现

非聚集索引通过以下方式实现:

  • UNIQUE 约束

    创建 UNIQUE 约束时,会创建唯一的非聚集索引,以默认强制实施 UNIQUE 约束。 如果表上的聚集索引尚不存在,则可以指定唯一聚集索引。 有关详细信息,请参阅 “唯一约束”和“检查约束”。

  • 独立于约束的索引

    默认情况下,如果未指定聚集索引,则会创建非聚集索引。 每个表可创建的最大非聚集索引数为 999。 这包括 PRIMARY KEY 或 UNIQUE 约束创建的任何索引,但不包括 XML 索引。

  • 索引视图上的非聚集索引

    在视图上创建唯一聚集索引后,可以创建非聚集索引。 有关详细信息,请参阅 创建索引视图

安全

权限

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

使用 SQL Server Management Studio

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

  1. 在对象资源管理器中,展开包含要在其中创建非聚集索引的表的数据库。

  2. 展开 表格 文件夹。

  3. 右键单击要创建非聚集索引的表,然后选择 “设计”

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

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

  6. “所选主键/唯一键”或“索引 ”文本框中选择新索引。

  7. 在网格中,选择“ 创建为聚集”,然后在属性右侧的下拉列表中选择 “否 ”。

  8. 单击 “关闭”

  9. 在“ 文件 ”菜单上,单击“ 保存table_name

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

  1. 在对象资源管理器中,展开包含要在其中创建非聚集索引的表的数据库。

  2. 展开 表格 文件夹。

  3. 展开要在其中创建非聚集索引的表。

  4. 右键单击 “索引 ”文件夹,指向 “新建索引”,然后选择“ 非聚集索引...”

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

  6. “索引键列”下,单击“ 添加...”

  7. “从table_name中选择列”对话框中,选中要添加到非簇集索引的表列的复选框。

  8. 单击 “确定”

  9. 在“ 新建索引 ”对话框中,单击“ 确定”。

使用 Transact-SQL

在表上创建非聚集索引

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

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

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

    USE AdventureWorks2012;  
    GO  
    -- Find an existing index named IX_ProductVendor_VendorID and delete it if found.   
    IF EXISTS (SELECT name FROM sys.indexes  
                WHERE name = N'IX_ProductVendor_VendorID')   
        DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor;   
    GO  
    -- Create a nonclustered index called IX_ProductVendor_VendorID   
    -- on the Purchasing.ProductVendor table using the BusinessEntityID column.   
    CREATE NONCLUSTERED INDEX IX_ProductVendor_VendorID   
        ON Purchasing.ProductVendor (BusinessEntityID);   
    GO  
    

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