将.CSV文件导入SQL Server的最佳实践(在性能方面)

时间:2018-04-03 10:48:55

标签: sql-server

将.CSV文件导入SQL Server的最佳做法(在性能方面)是什么? 在我的项目中,我需要从客户端上传.csv(ex.EmployeeData)文件,并且必须在插入数据库表之前验证所有记录,以便我可以避免重复记录。 我正在使用Angularjs,Web API2&上述项目的SQL Server 2014。

4 个答案:

答案 0 :(得分:1)

BULK INSERT 可能是最佳选择。

Microsoft Tech是一本很好的解读:

  

如果您的I / O系统速度很快,请考虑使用多个批量插入   并行运作。单个批量操作只会完全   利用一个CPU核心。正如我们将在其他场景中看到的那样,利用   多个并发批量流是扩展批量加载的关键。

这里有关于BULK INSERT

的文档

这是关于performance importing CSV files

的另一个问题

关于验证,您可以导入临时表并验证数据,而不是读取整个文件并在代码中验证。

答案 1 :(得分:0)

因此,您将通过验证上传大文件,这将花费大量时间,因此会给出超时错误。您可以通过在30秒或更短时间内进行测试来测试可以插入多少条记录并通过适当的验证,因为30秒是sql server中任何脚本允许的时间。我插入了5000条记录,但这也取决于查询性能,因此请确保您的查询写得很好并且不需要花费太多时间。

您可以将数据分成块,以便轻松处理。

答案 2 :(得分:0)

尽管BULK INSERT是最快的,但它要求将文件本地加载到SQL Server,这可能不适合多用户分层应用程序。由于您将ASP.NET作为需要进行验证等的中间层,我还建议您仔细查看ADO.NET SqlBulkCopy类。这是迄今为止将数据从.NET加载到Sql Server的最快方法。

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/bulk-copy-operations-in-sql-server

答案 3 :(得分:0)

在插入数据方面,只需使用BULK INSERT - 这将是最快的方式。为了验证数据,我实际上将它插入表中,然后通过调用存储过程或作业来进行验证。这样,您就不会阻止客户端进行工作。

如果您正在讨论大量文件,我可能会以编程方式将文件拆分为较小的块并批量加载这些块,然后进行验证。