【发布时间】:2011-01-31 20:47:25
【问题描述】:
我从我的数据库中选择了一些非聚集索引,如下所示:
SELECT sys.objects.name tableName,
sys.indexes.name indexName
FROM sys.indexes
JOIN sys.objects ON sys.indexes.object_id = sys.objects.object_id
WHERE sys.indexes.type_desc = 'NONCLUSTERED'
AND sys.objects.type_desc = 'USER_TABLE'
我想对每个结果运行以下命令:
ALTER INDEX indexName ON tableName DISABLE
我该怎么做呢?有没有更好的办法?
编辑
我这样做是为了截断表,然后使用“ALTER INDEX bla ON table REBUILD”进行重建。这需要自动化,因此删除和重建将是我宁愿避免的更高级别的维护活动。这是一个糟糕的计划吗?我需要一种以最小开销清空表格的方法。
【问题讨论】:
-
您最好还是放弃它们,因为没有 ALTER INDEX ENABLE,它们需要重新创建。如果禁用,它们将不会被维护。
-
如果删除,您会丢失定义,并且如果(何时)需要重新创建它们,则必须记住它们。如果禁用,定义将保留在系统表中,您不必担心从头开始重新创建它们。
-
@jl 您可以使用 ALTER INDEX REBUILD 重新启用索引。
标签: sql-server tsql sql-server-2008 indexing