Sql-Server
有沒有快速更改列類型而不刪除聚集索引的方法?
我有一個大表,它是一個 bigint 上的聚集索引。我們想將其更改為一個 int 以減少空間並提高性能。但是,刪除聚集索引並重新創建索引非常慢。
有沒有辦法加快這個過程,或者通過設計這是唯一改變數據類型的方法?
$$ Update $$只是想詳細說明一下我的問題,我想更新的列是日期維度鍵。它目前是一個 bigint(8 個字節),我想將它轉換為 int(4 個字節)。這應該會減小數據庫的大小,並且理論上應該總體上提高數據庫的性能。
要更改數據類型,您必須刪除並重新創建索引,如下所示(或者您可以使用 SSMS,它在幕後做類似的事情):
- 刪除引用此索引的其他表中的任何外鍵。
- 刪除索引
- 更改列數據類型
- 重建索引
- 放回您在步驟 1 中刪除的所有外鍵。
或者,您可以使用 TABLE_LOCK 將其包裝在事務中,以便在更改發生時沒有人可以插入/更新/刪除 -
- 創建另一個具有 Name_staging 的表和具有正確數據類型的列
- 創建索引、FK 等
- 將數據插入到 Name_staging 表中
- 將 Name_staging 重命名為 Original 表。
注意:最好在維護視窗中執行上述任務。