2012-12-18 53 views
12

好我寫這個的後續行動Changing data type of column in SQL Server掛斷/禁用索引是SQL Server

我的問題是早期,如果我需要刪除所有的索引和約束,它是回答我需要將它們刪除。

所以當我在這個主題上瀏覽互聯網時,我發現有一些帖子說它更好地禁用和啓用索引,而不是刪除並重新創建它們。

那麼哪個更好的方法呢?禁用索引是否允許您更改列的數據類型?兩者有什麼區別?

聲明與刪除和創建索引

DROP INDEX UX_1_COMPUTATION ON dbo.Computation 

ALTER TABLE dbo.Computation 
ALTER COLUMN ComputationID NVARCHAR(25) not null 

CREATE UNIQUE INDEX UX_1_COMPUTATION ON dbo.Computation (ComputationID); 

聲明與禁用和啓用索引

ALTER INDEX [UX_1_COMPUTATION ] ON dbo.Computation DISABLE 

ALTER TABLE dbo.Computation 
ALTER COLUMN ComputationID NVARCHAR(25) not null 

ALTER INDEX [UX_1_COMPUTATION ] ON dbo.Computation REBUILD; 
+4

你運行了你的測試腳本嗎?您還可以查看文檔,該文檔告訴您在索引中使用的[用於更改列的限制](http://msdn.microsoft.com/en-us/library/ms190273.aspx)以及[禁用索引](http://msdn.microsoft.com/en-us/library/ms177406(v = sql.100).aspx)。希望很明顯,禁用某些東西並刪除(刪除)它是有區別的。 – Pondlife

+0

@Pondlife感謝您的信息 – Sam

回答

5

指數是否允許您更改列的數據類型,以及停用?

它基於您選擇的索引類型。當表上的聚簇索引被禁用時,您無法修改列數據類型。如果你的索引是非聚集索引,那麼你可以。

兩者有什麼區別?

禁用和刪除索引之間的最大區別在於元數據和統計信息是否存在。如果禁用,他們是。如果下降,他們不是。確保在執行任何操作之前仔細權衡您的選項,並始終有辦法重新創建可用的索引。

哪個更好的方法呢?

在你的情況下,我會建議刪除並重新創建索引。