Sql-Server

有沒有快速更改列類型而不刪除聚集索引的方法?

  • January 15, 2018

我有一個大表,它是一個 bigint 上的聚集索引。我們想將其更改為一個 int 以減少空間並提高性能。但是,刪除聚集索引並重新創建索引非常慢。

有沒有辦法加快這個過程,或者通過設計這是唯一改變數據類型的方法?

$$ Update $$只是想詳細說明一下我的問題,我想更新的列是日期維度鍵。它目前是一個 bigint(8 個字節),我想將它轉換為 int(4 個字節)。這應該會減小數據庫的大小,並且理論上應該總體上提高數據庫的性能。

要更改數據類型,您必須刪除並重新創建索引,如下所示(或者您可以使用 SSMS,它在幕後做類似的事情):

  1. 刪除引用此索引的其他表中的任何外鍵。
  2. 刪除索引
  3. 更改列數據類型
  4. 重建索引
  5. 放回您在步驟 1 中刪除的所有外鍵。

或者,您可以使用 TABLE_LOCK 將其包裝在事務中,以便在更改發生時沒有人可以插入/更新/刪除 -

  1. 創建另一個具有 Name_staging 的表和具有正確數據類型的列
  2. 創建索引、FK 等
  3. 將數據插入到 Name_staging 表中
  4. 將 Name_staging 重命名為 Original 表。

注意:最好在維護視窗中執行上述任務。

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