在SQL Server 2005和SQL Server 2008禁用和启用索引的方法分享


摘要:
在查看SQL Server 2005和SQL Server 2008中的新功能时,
我们在索引上点击右键时,发现了一个“禁用”按钮,表示该索引可用于禁用表或视图上的索引。
下文将着重讲述此禁用索引的操作方法


数据库管理员可以使用SQL Server 2005及更高版本中提供的禁用索引功能来防止用户查询使用索引。
这个功能对于DBA来说非常有用,因为他们需要弄清楚表上的索引是否真的有用。
禁用索引时,索引定义保留在元数据中,
而索引统计信息也保存在非聚簇索引中。
但是,禁用视图上的聚簇索引或非聚簇索引会物理删除索引数据。
—————————————————————————–
如果您在表上禁用聚簇索引,那么表将不可用于用户访问,但数据仍将保留在表中,但在重建或删除索引之前,它将不可用于任何DML操作。
—————————————————————–

我们可以使用
ALTER INDEX REBUILD
CREATE INDEX WITH DROP_EXISTING
来启用禁用的索引。

例1:使用sql脚本禁用索引

 
 ---禁用 AdventureWorks数据库中的Person.Address表上IX_Address_StateProvinceID索引

USE AdventureWorks 
GO 
ALTER INDEX IX_Address_StateProvinceID ON Person.Address DISABLE 
GO 
-- 查询索引的使用情况
SELECT NAME AS [IndexName], TYPE_DESC AS [IndexType], 
CASE IS_DISABLED  
WHEN 0 THEN 'Enabled' 
ELSE 'Disabled'  
END AS [IndexUsage],  
FILL_FACTOR AS [FillFactor] FROM SYS.INDEXES 
WHERE OBJECT_ID = OBJECT_ID('Person.Address') ORDER BY IndexName, IndexUsage 
GO

方法2: 使用SQL Server Management Studio(SSMS)禁用索引

打开数据库AdventureWorks表的对象资源管理器,
找到 Person.Address ,
展开索引并右键单击IX_Address_StateProvinceID(非唯一,非集群)
从下拉列表中选择”禁用”


启用索引的方法分享

方法1:使用sql脚本启用禁用的索引

USE AdventureWorks 
GO 
ALTER INDEX IX_Address_StateProvinceID ON Person.Address REBUILD 
GO

方法2: 带DROP_EXISTING语句的CREATE INDEX启用索引

USE AdventureWorks 
GO 
CREATE NONCLUSTERED INDEX [IX_Address_StateProvinceID] ON [Person].[Address]  
( 
[StateProvinceID] ASC 
)WITH (DROP_EXISTING = ON, FILLFACTOR = 80) ON [PRIMARY] 
GO

方法3:通过ssms管理工具启用索引

打开数据库AdventureWorks表的对象资源管理器,
找到 Person.Address ,
展开索引并右键单击IX_Address_StateProvinceID(非唯一,非集群)
从下拉列表中选择”启用”