2016-05-31 73 views
0

我有一個45M行(45 GB數據空間和2GB索引空間)的表。我添加了一個新列,並立即完成。改變列大小需要很長時間?

alter table T add C char(25) 

然後我發現大小太小,所以我運行以下查詢。

alter table T alter column C varchar(2500) 

它運行了一個小時,仍在運行。 sp_whoisactive顯示(目前仍在運行)

reads: 48,000,000 
writes: 5,000,000 
physical reads: 3,900,000 

它不是很快嗎?

+0

你可能會在[DBA.SE]一個更好的答案(http://dba.stackexchange.com) – DaveShaw

+1

答案是:不是,不。 –

+1

將列添加到表的末尾幾乎是瞬間的,如果更改現有列的大小,則需要重建表和可能的索引 – JVC

回答

1

我測試了案例。你可以做得更快使用下面的步驟:

  1. 使用不同的名稱(稱之爲TBL2)
  2. 阿爾特上TBL2列從TBL1
  3. 將數據插入TBL2
  4. 刪除創建相同的表結構TBL1(舊錶)
  5. 重命名TBL2(新一)以TBL1

這會給你更好的性能。

原因是,改變包含數據的表上的列,將需要大量的數據傳輸和數據頁面對齊。 使用我的解決方案,您只需插入任何頁面重組的數據。

如果帖子回答您的問題,請註明是答案