改进SQL Server 2008中Update语句的查询时间

时间:2014-04-27 16:45:16

标签: sql sql-server sql-update database-performance

查询:

update Table 
set ColumUpdate = '{"BCstatus":' + CONVERT(varchar(10), Column2) + ',"Saving":"' + 
 CONVERT(varchar(200), Column3) + '","Successful":' + 
 CONVERT(varchar(10), Column4) + ',"couponCode":"' + Column5 + 
 '","description":"' + Column6 + '","domain":"' + Column7 + '.com","url":"' + Column8+'"}' 

我在Column8上有索引,而查询中没有其他列。

该表包含大约1600000条记录,并且需要花费大量时间来执行相同的操作。

2 个答案:

答案 0 :(得分:0)

由于SQL Server管理事务和事务日志的方式,对大量行执行更新/删除总是花费时间,无论多少都有多少。为了加快速度,总是建议

a)将恢复模式从“完整”更改为“批量记录”和

b)批量更新;找到一种方法将批量更新分成〜5.000当时,这将创造奇迹。

啊,并且c)在表运行时禁用表上的所有索引,并在完成后启用它们。

答案 1 :(得分:0)

您的更新语句似乎导致多个页面拆分。要处理此问题,您可以使用填充因子。有关详细信息,请参阅http://technet.microsoft.com/en-us/library/ms177459.aspx。重新建立索引以及设置填充因子可以提高更新的性能。 您可以使用以下方法在现有索引上设置填充因子:

ALTER INDEX <index name> ON <table name>
REBUILD WITH (FILLFACTOR = 80);