手柄记录
问题描述:
有人问我跑DB转换后沉重的更新,对于订单ID的一个给定的名单,手柄记录
我需要打开名册和处理每个ID。
例如:
- 客户表:
创建表CustOrders (ID INT, CustFName VARCHAR(10), CustLname VARCHAR(10), 主键(ID) )
对于列表中的每个id,存储过程将更新该记录。
我的第一个念头是:
创建它接受的ID(用表值参数)的列表存储过程。
每个ID,做我的东西
但后来我意识到这将需要为我想出了一个主意
太多的时间和有和尝试,并在运行并行模式,例如:
尝试运行几个存储的过程,其中每个存储的过程处理不同批量的ID的,
通过Mod运算符分例如 。
这就是我决定发布这个问题的原因,也许你有一个更好的想法,如何编写可以并行模式运行的程序。
更新它如何?如果您提供更多详细信息,则可能会向您展示如何在不逐一进行的情况下执行此操作(这肯定会比一次更新所有代价更高,SQL Server非常擅长,或者至少分批例如,一次10000行)。无论何时您在SQL Server中工作,并且认为“我需要一次执行x行”,并再次思考,因为在大多数情况下,这是错误的方式。 – 2013-04-07 19:21:31
还有谁的要求是这些更新并行运行?有人认为可以同时对同一页面进行两次更新吗?尽管可以根据聚集索引将更新分成不同的批次,但这只有在表上没有聚集索引时才有所帮助,并且在协调时仍然很痛苦。为什么不告诉我们你是如何更新的,获取最有效方法的建议,然后*看看是否存在性能问题。与其告诉我们您需要通过并行化来解决性能问题。 – 2013-04-07 19:23:06