更新数百万条记录
问题描述:
我正在使用MS SQL,并且有一个包含数百个工作成本中心数百万活动的表。我们希望根据我们不同的管理级别和我们的报告结构分析数据。因此,我试图用主数据表中的记录更新数据。更新数百万条记录
到目前为止,一切正常,但它太慢了。这就是我如何做到这一点的时刻:
UPDATE [Activity - E].dbo.td_Import
SET [Sender.Type] = tmp_CC.[Type],
[Sender.Person Responsible] = tmp_CC.[Person Responsible],
[Sender.Level1] = tmp_CC.[Level 1],
[Sender.Level2] = tmp_CC.[Level 2],
[Sender.Level3] = tmp_CC.[Level 3],
[Sender.Level4] = tmp_CC.[Level 4],
[Sender.Active] = tmp_CC.[Active]
FROM ( SELECT [Cost Center], [Type], [Person Responsible], [Level 1], [Level 2], [Level 3], [Level 4], [Active]
FROM [Master Data - E].dbo.md_CostCenter md_CC
WHERE (md_CC.[Record Invalid] LIKE '') OR (md_CC.[Record invalid] IS NULL)) tmp_CC
WHERE ([Sender.CC] LIKE tmp_CC.[Cost Center]) AND ([Sender.Type] IS }NULL)
我要运行类似的代码五次,它需要大约90分钟更新的所有记录。由于数据应该全天候提供给管理人员,我只需要一个大约两个小时的短窗口来获取数据,更新所有信息并为管理人员创建单个报告(excel报告,每个报告大约需要10分钟) 。
我正在考虑与主数据表加入数据,但我在所有的教程中完全丢失了。我得到的只是一些临时表,但没有任何信息存储在我的活动表(td_Import)中。
对初学者有任何建议吗?提前致谢。
Chris
答
我想我终于有了Join的概念。
以下代码将运行时间从110多万条记录中的30分钟改为3分钟。 此外,我还包括减少有效成本中心选择的观点(查看[有效成本中心])。
UPDATE [Activity - E].dbo.td_Import
SET [Sender.Type] = md_CC.[Type],
[Sender.Person Responsible] = md_CC.[Person Responsible],
[Sender.Level1] = md_CC.[Level 1],
[Sender.Level2] = md_CC.[Level 2],
[Sender.Level3] = md_CC.[Level 3],
[Sender.Level4] = md_CC.[Level 4],
[Sender.Active] = md_CC.[Active]
FROM [Activity - E].dbo.td_Import td_Imp
LEFT JOIN [Master Data - E].dbo.[Active Cost Centers] md_CC
ON td_Imp.[Sender.CC] LIKE md_CC.[Cost Center]
我希望这会对其他人有所帮助。
Chris
这听起来像是一个分析服务工作,也许看看建造一个或多个立方体。 – twoleggedhorse
也许我在这里错过了一些东西,但我没有看到你正在更新的表和同一个更新语句中的子查询之间的关系。 –
实际上,您的一些SQL可以重构,但我现在正在使用手机。如果没有人回复,我会在稍后帮你。 – twoleggedhorse