如果你在一张表上禁用一个群集索引,那么这张表就不能被用户访问。尽管如此,这些数据仍然保存在这张表中,但是它不能用于任何DML操作,除非这个索引重新建立或者删除掉。你可以使用ALTER INDEX REBUILD重新建立一个索引,你也可以使用CREATE INDEX WITH DROP_EXISTING语句启用一个禁用了的索引。 创建索引选择合适的可选项
在这个技巧中,我将使用AdventureWorks数据库中的Person.Address表。
禁用索引
你可以通过不同的方式禁用索引。让我们逐个来介绍。
1、 通过T-SQL禁用索引
执行下面的T-SQL来禁用AdventureWorks数据库中的Person.Address 表的IX_Address_StateProvinceID索引。 探究SQL Server 2008的过滤索引
USE AdventureWorks
GO
ALTER INDEX IX_Address_StateProvinceID ON Person.Address DISABLE
GO
-- Query to check Index Usage
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、 通过SMSS禁用索引
打开AdventureWorks表的对象浏览器,直到你打开到Person.Address,接着打开索引,然后右键单击IX_Address_StateProvinceID(非唯一,非群集)并且从下拉菜单中选择禁用。这时将打开禁用索引对话框,点击OK就可以禁用索引。
你也可以像下面截图中那样,通过不勾选使用索引选项来禁用一个索引,这个选项在索引属性对话框的选项页面中。
2、 通过SMSS禁用索引
打开AdventureWorks表的对象浏览器,直到你打开到Person.Address,接着打开索引,然后右键单击IX_Address_StateProvinceID(非唯一,非群集)并且从下拉菜单中选择禁用。这时将打开禁用索引对话框,点击OK就可以禁用索引。
你也可以像下面截图中那样,通过不勾选使用索引选项来禁用一个索引,这个选项在索引属性对话框的选项页面中。
启用索引
你可以通过不同的方式启用索引。现在让我们逐个进行介绍。
1、 通过ALTER INDEX REBUILD语句启用索引
USE AdventureWorks
GO
ALTER INDEX IX_Address_StateProvinceID ON Person.Address REBUILD
GO |
2、 通过CREATE INDEX WITH DROP_EXISTING语句启用索引
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(非唯一,非群集)并且从下拉菜单中选择重新建立。这时将打开重新建立索引对话框,点击OK就可以 启用索引。
你也可以像下面截图中那样,通过选择使用索引选项来启用一个索引,这个选项在索引属性对话框的选项页面中。