欢迎光临
我们一直在努力

将一个更新划分为几个批次_数据库技巧

建站超值云服务器,限时71元/月

问:我想以一次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停止查询处理。这项技术很有用,因为它避免了大量更新所致的并发命中;更新中的行数越少,更新任务使其他用户不能访问该数据的可能性就越小。结合事务日志备份,这一方法还可以使您的事务日志的大小降至最低。


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


—Microsoft SQL Server开发团队


 

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 将一个更新划分为几个批次_数据库技巧
分享到: 更多 (0)