0
我有一个22000行的CSV文件。我第一次读取csv文件中的所有行,并使用实体框架db.SaveChanges()
将它们添加到数据库中,其中保存更改需要45秒。然后下次读取所有记录,只添加新记录并更新现有记录,这需要2分钟... 插入批量记录的最佳方式是什么?为什么它需要这么长的时间来更新
我有一个22000行的CSV文件。我第一次读取csv文件中的所有行,并使用实体框架db.SaveChanges()
将它们添加到数据库中,其中保存更改需要45秒。然后下次读取所有记录,只添加新记录并更新现有记录,这需要2分钟... 插入批量记录的最佳方式是什么?为什么它需要这么长的时间来更新
使用EF进行保存时,会发生3次disticnt动作,它们在速度上有很大差异。插入和删除操作是在一次调用SQL服务器的情况下完成的,但更新一次只能完成一条记录,因此它可以检查并发问题并向您报告哪些实体失败原因。
如果你想坚持使用EF,你应该总是INSERT,然后在服务器上做一个MERGE(SQL命令)。如果你没有创建存储过程的能力,你也可以用C#中的sqlcommand来完成MERGE。
最好的选择和最快的是使用BULK INSERT,如果可以的话。
仅添加新记录和更新现有记录时,只需插入22,000行就能完成更多工作。 –
您是否将新行添加到csv文件或从新csv中选择新行? –
只需将所有行批量插入到sql-server的临时表中,然后在那里执行更新,插入和删除操作。切勿插入/批量将数据直接插入实际表格中。 CSV文件可以包含各种垃圾数据。 –