2012-11-10 49 views
0

我需要的缺省值爲增加,使得所有現有行的值是1列,爲所有新行0T-SQL更新時間比下降和增加列

夠簡單了更長的時間,我創建了一個腳本

ALTER TABLE Table ADD Column1 BIT NOT NULL DEFAULT 0 
GO 

UPDATE Table SET Column = 1 
GO 

更新查詢在400K行數據集上需要10多分鐘。 這裏的開銷在哪裏

我懷疑可以添加列,使得默認爲1,然後改變默認爲0,在不到10秒的計算(和可以改變腳本,以用於下一個測試階段這樣做)。

+0

你有問題嗎? – Oded

+0

該死的開銷在哪裏,如何在沒有我建議的解決方法的情況下進行優化。 – Colton

+1

哪部分需要10分鐘?第一個查詢還是第二個? –

回答

0

首先,使用"Print"並在兩個語句之間加上兩個時間戳,以檢查哪一個具有高位。爲了解決問題,你應該首先知道導致它的原因。正如我的經驗所說,它正在添加需要很長時間才能完成的專欄。

二,如果你有大約400K記錄存儲在表中,當然增加一個新列有很大的IO成本。所以如果你讓我知道你的需要,我會想一個更好的解決方案。添加和刪​​除列,改變表格等在藍色月亮中發生一次,你不應該像通常的操作那樣做這樣的事情。這根本不正確。

畢竟,我明白你想添加一個列並在不到10秒內更新值,但它取決於許多其他的事情和你的代碼(因爲它很簡單)就是其中之一。所以我認爲你應該比你的代碼更多地考慮這個想法。

希望它有幫助。

乾杯

+0

我分別運行了每個查詢,這是'UPDATE'查詢耗時10分鐘,'ALTER'查詢幾乎立即發生。 : -/ – Colton

+0

@Sparksis你想要做什麼取決於許多其他參數。最重要的是IO操作的性能,簡單來說就是硬分佈速度。我建議你使用Profiler查看成本,使用執行計劃並查看實際發生在查詢中的情況以及成本。它會幫助你做出決定。 – Rikki

+0

我很想使用探查器,但我沒有在開發服務器上的相應權限。 - 我們的數據庫管理員堅持認爲他們完全控制了這些東西,但通常太忙而無法在需要時幫助他們。 – Colton