首页 > 解决方案 > SQL Server 复杂添加/更新每天合并百万行

问题描述

我有 7 份报告,每天在深夜下载。

这些报告可以在 csv/xml 中下载。我正在下载它们 csv 格式,因为它们具有内存效率。

该进程在后台运行,由hangfire 管理。

下载后,我使用 dapper 运行存储过程,该过程使用合并语句插入/更新/更新数据。这个存储过程有七个表值参数。

我没有删除,而是将该记录的IsActive列更新为 false。

请注意,2 份报告的记录超过 100 万条。

我只在 Azure SQL 中收到超时异常。在 SQL Server 中,它工作正常。作为一种解决方法,我已将此查询的超时时间增加到 1000。

此应用在 Azure s2 中运行。

我已经考虑过发送 xml 的选项,但我发现 SQL Server 处理 xml 的速度很慢,这会适得其反。

我也不能使用SqlBulkCopy,因为我必须根据某些条件进行更新。

另请注意,将来会添加更多报告。

此外,当添加新报告时,会有大量插入。如果再次运行先前添加的报告,则运行多数更新。

这些表目前没有任何索引,只有聚簇整数主键。

每一行都有一个唯一的代码。此代码用于识别是否插入/更新/删除

你能推荐一种提高性能的方法吗?

标签: sql-serverasp.net-core-2.0bulkinsertbulkupdate

解决方案


您的来源是否输入了全部数据?它们是否是更新的/新的。我假设通过说唯一代码(插入/更新/删除)您只考虑更改(增量)。如果不是那是一个领域。另一个是考虑并行性。我认为您需要为每个表设置不同的存储过程。非依赖表可以一起处理


推荐阅读