我的C#应用程序从Sql Server检索超过一百万条记录,处理它们然后再更新数据库。这导致接近100,000个更新语句,它们都具有以下形式 -
update Table1 set Col1 = <some number> where Id in (n1, n2, n3....upto n200)
“Id”是具有聚簇索引的int主键。没有两个更新语句更新相同的ID,所以从理论上讲,它们都可以并行运行而不需要任何锁定。因此,理想情况下,我想我应该尽可能多地并行运行。期望所有人都不会超过5分钟。
现在,我的问题是最有效的方法是什么?我正在尝试以下 -
我认为这对于处理大量数据的许多应用程序来说必定是一个非常常见的问题。有没有标准的解决方案?任何想法或建议将不胜感激。
答案 0 :(得分:0)
我创建了一个整数tbl类型,以便我可以将所有id作为列表传递给sp,然后单个查询将更新整个表。
这仍然很慢,但我发现这比传统方式更快#34;其中id为(1,2,3)&#34;
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
如果您有任何问题,请与我们联系。