启用索引和约束
本主题介绍了如何使用 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_ddladmin 和 db_owner 固定数据库角色的成员。
[返回页首]
使用 SQL Server Management Studio
启用禁用的索引
在对象资源管理器中,单击加号以便展开包含您要启用索引的表的数据库。
单击加号以便展开**“表”**文件夹。
单击加号以便展开您要启用索引的表。
单击加号以便展开**“索引”**文件夹。
右键单击要启用的索引,然后选择**“重新生成”**。
在**“重新生成索引”对话框中,确认正确的索引位于“要重新生成的索引”网格中,然后单击“确定”**。
为表启用所有索引
在对象资源管理器中,单击加号以便展开包含您要启用索引的表的数据库。
单击加号以便展开**“表”**文件夹。
单击加号以便展开您要启用索引的表。
右键单击**“索引”文件夹,然后选择“全部重新生成”**。
在**“重新生成索引”对话框中,确认正确的索引位于“要重新生成的索引”网格中,然后单击“确定”。 若要从“要重新生成的索引”**网格中删除索引,请选择该索引,再按 Delete 键。
在**“重新生成索引”**对话框中将提供以下信息:
[返回页首]
使用 Transact-SQL
使用 ALTER INDEX 启用已禁用的索引
在**“对象资源管理器”**中,连接到数据库引擎的实例。
在标准菜单栏上,单击**“新建查询”**。
将以下示例复制并粘贴到查询窗口中,然后单击**“执行”**。
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 启用已禁用的索引
在**“对象资源管理器”**中,连接到数据库引擎的实例。
在标准菜单栏上,单击**“新建查询”**。
将以下示例复制并粘贴到查询窗口中,然后单击**“执行”**。
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 启用已禁用的索引
在**“对象资源管理器”**中,连接到数据库引擎的实例。
在标准菜单栏上,单击**“新建查询”**。
将以下示例复制并粘贴到查询窗口中,然后单击**“执行”**。
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 启用表上的所有索引
在**“对象资源管理器”**中,连接到数据库引擎的实例。
在标准菜单栏上,单击**“新建查询”**。
将以下示例复制并粘贴到查询窗口中,然后单击**“执行”**。
USE AdventureWorks2012; GO -- enables all indexes -- on the HumanResources.Employee table ALTER INDEX ALL ON HumanResources.Employee REBUILD; GO
使用 DBCC DBREINDEX 启用表上的所有索引
在**“对象资源管理器”**中,连接到数据库引擎的实例。
在标准菜单栏上,单击**“新建查询”**。
将以下示例复制并粘贴到查询窗口中,然后单击**“执行”**。
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)。
[返回页首]