WEB开发网
开发学院数据库MSSQL Server 将一个更新划分为几个批次 阅读

将一个更新划分为几个批次

 2007-11-11 05:58:09 来源:WEB开发网   
核心提示:问:我想以一次5,000行的方式批量更新一个大型表,但我不知道怎样分割数据,将一个更新划分为几个批次,该表不包含增量数字或整数主键,怎样才能在保持良好性能的同时实现数据更新呢?答:如果知道哪些行尚未被更新,您可以使用游标遍历所有数据并提交每个x值,但是,您可以使用简单的谓词来排除已更新的行,ROWCOUNT设置可以帮助

问:我想以一次5,000行的方式批量更新一个大型表,但我不知道怎样分割数据。该表不包含增量数字或整数主键。怎样才能在保持良好性能的同时实现数据更新呢?

答:如果知道哪些行尚未被更新,您可以使用简单的谓词来排除已更新的行,ROWCOUNT设置可以帮助您批量分割数据。以下的代码清单说明了如何使用该设置:

SET ROWCOUNT 1000
WHILE (1=1) BEGIN
  BEGIN TRANSACTION
  UPDATE...set ...,MyLastUpdate='date',...WHERE
   MyLastUpdate < 'date'
   -- 更新1000未更新行
  IF @@ROWCOUNT = 0
  BEGIN
   COMMIT TRANSACTION
   BREAK
  END
  COMMIT TRANSACTION
END

在指定的行数返回后,ROWCOUNT将使sql server(WINDOWS平台上强大的数据库平台)停止查询处理。这项技术很有用,因为它避免了大量更新所致的并发命中;更新中的行数越少,更新任务使其他用户不能访问该数据的可能性就越小。结合事务日志备份,这一方法还可以使您的事务日志的大小降至最低。

如果没有识别已更新行的机制,您可以使用游标遍历所有数据并提交每个x值。但是,游标占用服务器资源的时间通常要多于基于集合的语句。

—Microsoft sql server(WINDOWS平台上强大的数据库平台)开发团队

Tags:一个 更新 划分

编辑录入:coldstar [复制链接] [打 印]
赞助商链接