Sql-Server
如何自動將堆轉換為聚集索引?
我在我們的一個生產數據庫中有大約 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 。