[英]Efficiently execute 100K update statements - C# & Sql Server
我的C#应用程序从Sql Server中检索了超过一百万条记录,对其进行处理,然后将数据库更新回来。 这导致将近100,000条更新语句,并且它们都具有以下形式-
update Table1 set Col1 = <some number> where Id in (n1, n2, n3....upto n200)
“ Id”是一个带聚集索引的int,主键。 没有两个更新语句会更新相同的ID,因此从理论上讲,它们都可以并行运行而没有任何锁。 因此,理想情况下,我想我应该尽可能多地并行运行。 预期所有操作都将在不超过5分钟的时间内完成。
现在,我的问题是最有效的方法是什么? 我正在尝试以下-
我想对于许多处理大量数据的应用程序,这肯定是一个非常普遍的问题。 有没有标准的解决方案? 任何想法或建议,将不胜感激。
我创建了一个整数tbl类型,以便可以将所有id传递给sp作为列表,然后单个查询将更新整个表。
这仍然很慢,但是我认为这比常规的“ where id in(1,2,3)”要快得多
TYPE的定义
CREATE TYPE [dbo].[integer_list_tbltype] AS TABLE(
[n] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[n] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
GO
这是用法。
declare @intval integer_list_tbltype
declare @colval int=10
update c
set c.Col1=@colval
from @intval i
join Table1 c on c.ID = i.n
如果您有任何疑问,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.