Sql-Server

如何自動將堆轉換為聚集索引?

  • May 22, 2019

我在我們的一個生產數據庫中有大約 40 個表,由於各種原因,這些表不是使用聚集索引創建的。

轉換這些堆的最佳自動化方法是什麼?

由於我是天生的開發人員,我真的不想手動執行此操作。

我開始為此創建一個過程,如為什麼此游標會以錯誤的順序產生結果?,但是我對該文章的回复讓我質疑我在做什麼。

我會說我同意@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;

再次重申,就像@MartinSmith 所說,我不會盲目地執行任何會影響性能和設計的 DDL。但以上只是一個開始,將為您提供具有 IDENTITY 列的堆的 T-SQL 。

引用自:https://dba.stackexchange.com/questions/25332