Sql-Server

將列添加到生產表

  • January 14, 2020

在 SQL Server 2008 R2 上向大型生產表添加列的最佳方法是什麼?根據微軟的線上書籍:

ALTER TABLE 中指定的更改會立即實施。如果更改需要修改表中的行,則 ALTER TABLE 會更新這些行。ALTER TABLE 在表上獲取模式修改鎖,以確保在更改期間沒有其他連接甚至引用表的元數據,除了最後需要非常短的 SCH-M 鎖的線上索引操作。

(http://msdn.microsoft.com/en-us/library/ms190273.aspx)

在具有數百萬行的大表上,這可能需要一段時間。停電是唯一的選擇嗎?處理這種情況的最佳方法是什麼?

“這取決於”

如果您添加不需要向行添加數據的列,那麼它可能會非常快。

例如,添加 int 或 char 需要物理行移動。不應該添加一個沒有預設值的可為空的 varchar(除非 NULL 點陣圖需要擴展)

您需要在恢復的生產副本上試用它以獲得估算值

如果您必須在十億行表上重新添加索引和鍵,則創建新表、複製、重命名可能需要更長的時間。

我已經更改了十億行表,這些表需要幾秒鐘才能添加一個可為空的列。

我說要先備份嗎?

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