我在我們的Microsoft SQL Server中的單個表中有大量的行。我可以編寫SQL腳本來更新SQL Server中的單個表的所有行,但分批嗎?
我需要在表中添加一個新列(DateTime
)。精細。該列需要爲NOT NULL。好的。現在,這就是問題所在:
它的時間太長設置所有列值所有行
我試圖創建可空列。這花了納秒。然後將UPDATE
的所有行設置爲GETUTCDATE()
。
例如。
DECLARE @foo = GETUTCDATE();
UPDATE PewPew
SET NewField = @Foo
2小時後,我不得不取消查詢。是的,2個小時。我也沒有這樣做,在TRANSACTION
。然後我放棄了新的領域,我們回到了我們開始的地方。
我想可能我們
- 創建NULLABLE列
- 在1000或東西批次,更新前1000列,其中新野爲NULL。
一旦全部完成,然後改變列,使其不可空
的SQL Server是在Azure上 - 這是一個標準的D13(8個核,56 GB內存)VM,我認爲我們把它在SSD上,所以我想認爲硬件不是太糟糕。
腳註:大量的行數=我認爲大約是2000萬。這對我們來說很大,但對一些人來說並不大。我們明白了。
考慮事務日誌以及參考:http://dba.stackexchange.com/questions/60789/what-are-the-most-effective-techniques-to-reduce-sql-server-disk-space-use - 當 –
你能分享你的餐桌設計嗎? Azure上20m @ 2+小時感覺緩慢。 –