如何自动将堆转换为聚集索引?

Han*_*non 6 sql-server-2005 sql-server clustered-index heap

我在我们的一个生产数据库中有大约 40 个表,由于各种原因,这些表不是使用聚集索引创建的。

转换这些堆的最佳自动化方法是什么?

由于我天生是一名开发人员,我真的不想手动执行此操作。

我开始为此创建一个过程,如为什么此游标以不正确的顺序产生结果中所述?,然而我对那篇文章的回应让我怀疑我在做什么。

Tho*_*ger 8

我会说我同意@MartinSmith。确定聚集索引键需要一些思考和规划。

但是,如果您希望抢先一步并生成一些 T-SQL 代码,例如,CREATE INDEX在具有IDENTITY列(普遍接受的聚集索引键)的堆上创建命令,那么您可以执行以下操作:

declare @create_indexes nvarchar(max);
set @create_indexes = N'';

select
    @create_indexes = @create_indexes + 
        'create clustered index ' + quotename('IX_' + object_name(i.object_id)) + 
        char(13) + char(10) +
        'on ' + quotename(object_name(i.object_id)) + '(' + quotename(c.name) + ');' +
        char(13) + char(10) + 
        'go' + 
        char(13) + char(10)
from sys.indexes i
inner join sys.columns c
on i.object_id = c.object_id
where i.type = 0
and c.is_identity = 1;

print @create_indexes;
Run Code Online (Sandbox Code Playgroud)

再次重申,就像@MartinSmith 所说的那样,我不会像这样盲目地执行任何会影响性能和设计的 DDL。但以上只是一个开始,将为您提供具有 IDENTITY 列的堆的 T-SQL 。