启用索引和约束

本主题介绍了如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2012 中启用已禁用的索引。 索引被禁用后一直保持禁用状态,直到它重新生成或删除。

本主题内容

  • 开始之前:

    限制和局限

    安全性

  • 若要启用禁用的索引,请使用:

    SQL Server Management Studio

    Transact-SQL

开始之前

限制和局限

  • 在索引重新生成之后,任何因禁用索引而被禁用的约束必须手动将其启用。 PRIMARY KEY 和 UNIQUE 约束可通过重新生成相关联的索引来启用。 您必须重新生成(启用)索引才能启用引用 PRIMARY KEY 或 UNIQUE 约束的 FOREIGN KEY 约束。 FOREIGN KEY 约束可使用 ALTER TABLE CHECK CONSTRAINT 语句来启用。

  • 当 ONLINE 选项设置为 ON 时,不能重新生成禁用的聚集索引。

  • 当禁用或启用聚集索引,禁用非聚集索引时,对聚集索引操作会对禁用的非聚集索引有如下影响。

    聚集索引操作

    禁用的非聚集索引…

    ALTER INDEX REBUILD。

    保持禁用状态。

    ALTER INDEX ALL REBUILD。

    重新生成或启用。

    DROP INDEX。

    保持禁用状态。

    CREATE INDEX WITH DROP_EXISTING。

    保持禁用状态。

    创建一个新的聚集索引,其行为与 ALTER INDEX ALL REBUILD 相同。

  • 与聚集索引相关联的非聚集索引允许的操作,取决于这两种索引类型的状态是禁用还是启用。 下表概括了非聚集索引允许的操作。

    非聚集索引操作

    聚集和非聚集索引均禁用时。

    聚集索引启用而非聚集索引处于禁用或启用中的任一状态时。

    ALTER INDEX REBUILD。

    操作失败。

    操作成功。

    DROP INDEX。

    操作成功。

    操作成功。

    CREATE INDEX WITH DROP_EXISTING。

    操作失败。

    操作成功。

安全性

权限

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

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

使用 SQL Server Management Studio

启用禁用的索引

  1. 在对象资源管理器中,单击加号以便展开包含您要启用索引的表的数据库。

  2. 单击加号以便展开**“表”**文件夹。

  3. 单击加号以便展开您要启用索引的表。

  4. 单击加号以便展开**“索引”**文件夹。

  5. 右键单击要启用的索引,然后选择**“重新生成”**。

  6. 在**“重新生成索引”对话框中,确认正确的索引位于“要重新生成的索引”网格中,然后单击“确定”**。

为表启用所有索引

  1. 在对象资源管理器中,单击加号以便展开包含您要启用索引的表的数据库。

  2. 单击加号以便展开**“表”**文件夹。

  3. 单击加号以便展开您要启用索引的表。

  4. 右键单击**“索引”文件夹,然后选择“全部重新生成”**。

  5. 在**“重新生成索引”对话框中,确认正确的索引位于“要重新生成的索引”网格中,然后单击“确定”。 若要从“要重新生成的索引”**网格中删除索引,请选择该索引,再按 Delete 键。

在**“重新生成索引”**对话框中将提供以下信息:

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

使用 Transact-SQL

使用 ALTER INDEX 启用已禁用的索引

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

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

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

    USE AdventureWorks2012;
    GO
    -- Enables the IX_Employee_OrganizationLevel_OrganizationNode index
    -- on the HumanResources.Employee table.
    
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee
    REBUILD; 
    GO
    

使用 CREATE INDEX 启用已禁用的索引

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

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

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

    USE AdventureWorks2012;
    GO
    -- re-creates the IX_Employee_OrganizationLevel_OrganizationNode index
    -- on the HumanResources.Employee table
    -- using the OrganizationLevel and OrganizationNode columns
    -- and then deletes the existing IX_Employee_OrganizationLevel_OrganizationNode index
    CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee
       (OrganizationLevel, OrganizationNode)
    WITH (DROP_EXISTING = ON);
    GO
    

使用 DBCC DBREINDEX 启用已禁用的索引

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

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

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

    USE AdventureWorks2012; 
    GO
    -- enables the IX_Employee_OrganizationLevel_OrganizationNode index
    -- on the HumanResources.Employee table
    DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode);
    GO
    

使用 ALTER INDEX 启用表上的所有索引

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

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

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

    USE AdventureWorks2012;
    GO
    -- enables all indexes
    -- on the HumanResources.Employee table
    ALTER INDEX ALL ON HumanResources.Employee
    REBUILD;
    GO
    

使用 DBCC DBREINDEX 启用表上的所有索引

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

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

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

    USE AdventureWorks2012; 
    GO
    -- enables all indexes
    -- on the HumanResources.Employee table
    DBCC DBREINDEX ("HumanResources.Employee", " ");
    GO
    

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

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