2012-08-06 52 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 

我希望这会有所帮助。
关注大家。