Sql-Server
將標識列從 INT 更改為 BIGINT
我有一個表,其中的標識列也是主鍵。目前,它有 5000 萬行,標識列的最高值為 148,921,803。該表有很多
DELETE
s 並INSERTS
在其上執行,因此價值很高。我們希望將數據類型從 更改
INT
為BIGINT
以準備添加更多行。請注意,沒有對 PK 列的引用。以最少的停機時間來做到這一點的最佳方法是什麼?我有兩個選擇。
- 刪除PK並更改列;或者
- 複製刪除重命名方法,如此處所述:
由於在標識列上定義了一個主鍵,您將無法直接更改此列。
您在問題中提到的兩種方法都可以使用,停機時間取決於您的伺服器的執行方式以及該表中駐留的行數。
- 刪除PK並更改列;或者
先放下PK
/****** Object: DROP Index [PK_DatabaseLog_DatabaseLogID]******/ ALTER TABLE [dbo].[TableName] DROP CONSTRAINT [PK_TableName_ID] GO
更改列
ALTER TABLE [dbo].[TableName] ALTER COLUMN [dbo.ID] BIGINT
添加主鍵
/****** Object: ADD Index [PK_DatabaseLog_DatabaseLogID]******/ ALTER TABLE [dbo].[TableName] ADD CONSTRAINT [PK_TableName_ID] PRIMARY KEY CLUSTERED ( [ID] ASC )
這種方法通常不需要太多時間。在我的環境中,在擁有超過 500 萬行的大表上需要幾秒鐘的時間。
- 複製刪除重命名方法,如所述
您也可以使用這種方法。但是,對於這種方法,您需要比方法一更多的停機時間,因為您必須同步表。