我有7个报告,每天在深夜下载。
这些报告可以在CSV/XML下载。我正在下载CSV格式,因为它们是有效的。
此过程在后台运行,由Hangfire管理。
下载后,我使用dapper来运行一个存储过程,该过程使用合并语句插入/更新/更新数据。此存储过程具有七个表值参数。
而不是删除,我将记录的IsActive
列更新为false。
请注意,2个报告的记录超过100万。
我仅在Azure SQL中获得超时例外。在SQL Server中,它可以正常工作。作为解决方法,我将超时增加到1000个查询。
此应用程序在Azure S2中运行。
我已经考虑了发送XML的选项,但我发现SQL Server在处理XML方面很慢。
我也不能使用SqlBulkCopy
,因为我必须根据某些条件进行更新。
还请注意,将来将添加更多报告。
当添加新报告时,也会有大量插入物。如果先前添加的报告再次运行,则运行多数更新。
这些表目前没有任何索引,只有群集整数主键。
每行都有一个唯一的代码。此代码用于确定是否插入/update/delete
您可以推荐一种提高性能的方法吗?
您的源是输入整个数据吗?它们是否已更新/新。我假设通过说唯一的代码(插入/update/delete(,您仅考虑更改(delta(。如果没有,那是一个领域。另一个是考虑并行性。我认为那时您需要为每张表有不同的存储过程。非依赖表可以一起处理