2012-08-06 85 views
1

我有一個表有500000個記錄aprox。我需要更新字段,並使用以下指令:更新數據庫表ltrim rtrim太慢

update myTable set myField = ltrim(rtrim(myField)) 

但是,該指令需要一個小時才能執行。我已經使用where子句前嘗試:

update myTable set myField = ltrim(rtrim(myField)) where myPrimaryKey >= 0 and myPrimaryKey <= 50000 

但執行時間是很慢的了。

任何想法?我該如何改進更新的性能? 此致敬禮。

回答

0

嘗試單獨爲此更新創建一個non-clustered index而不是myField,然後嘗試此更新腳本。

+0

我在myField上已經有一個非聚集索引,我也更新了統計數據。任何其他建議? – 2012-08-06 17:04:59

0

好的。我使用CURSOR減少了時間。

DECLARE cursor_prueba CURSOR FOR 
select A, B, C from MyTable order by A 
' A is PrimaryKey 

OPEN cursor_prueba 
FETCH cursor_prueba INTO @varA, @varB, @varC 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    update MyTable set B = ltrim(rtrim(B)), C = ltrim(rtrim(C)) where A = @varA 

    FETCH cursor_prueba INTO @varA, @varB, @varC 
END 

CLOSE cursor_prueba 
DEALLOCATE cursor_prueba 

我希望這會有所幫助。
關注大家。