在SQL Server 2008/2012中,向大表(缺省爲null)添加空列或多或少是即時的。向大表添加非空列SQL Server 2012在不同服務器上的行爲有所不同
ALTER TABLE TableWithManyRows
ADD TestNull INT NULL;
在SQL Server 2012中,這也應該是不空列被設置爲默認值的情況下 - 看http://rusanu.com/2011/07/13/online-non-null-with-values-column-add-in-sql-server-11/
下面的語句:
ALTER TABLE TableWithManyRows
ADD TestWithValues INT NOT NULL DEFAULT 0 WITH VALUES;
運行更或在我的本地機器上立即執行,但在生產數據庫服務器上非常慢。
兩者都運行SQL Server 2012.運行「Null」版本對於兩者都是即時的,這只是非空的情況,我發現差異。
是否有配置選項可能會影響此?有關如何追蹤差異的其他建議?
解決方案(萬一有人不發現它在下面的評論)
我很困惑,因爲我在本地有開發版,其行爲類似於企業版。生產服務器沒有企業版。
您的機器與服務器上的數據集有多大?總行數是多少? – 2014-03-13 12:11:23
兩種情況下約500k行。 –
如果其他進程在生產中同時觸發表,則您正在嘗試更改會大大影響性能的表。對於這樣大的事情,我會把它變成一項工作,在最慢的時間內在一個工作時間後運行一次。 – 2014-03-13 12:19:20