我有一個約80,000行的CSV文件,我試圖在C#應用程序中處理它,並對我的SQL數據庫進行必要的更改。我將CSV讀入應用程序,不需要很長時間就可以從那裏處理它。C# - SQL插入和更新速度
對於來自CSV的每條記錄,我都會根據條件(從SQL select語句)插入新記錄或更新數據庫中的現有記錄。我只是使用C#內聯SQL命令來執行我的選擇,更新和插入。這個過程大約需要40分鐘才能完成。
我想知道是否有任何有關大型SQL數據庫更新和插入的最佳實踐,可以使此過程更快。
在此先感謝!
我有一個約80,000行的CSV文件,我試圖在C#應用程序中處理它,並對我的SQL數據庫進行必要的更改。我將CSV讀入應用程序,不需要很長時間就可以從那裏處理它。C# - SQL插入和更新速度
對於來自CSV的每條記錄,我都會根據條件(從SQL select語句)插入新記錄或更新數據庫中的現有記錄。我只是使用C#內聯SQL命令來執行我的選擇,更新和插入。這個過程大約需要40分鐘才能完成。
我想知道是否有任何有關大型SQL數據庫更新和插入的最佳實踐,可以使此過程更快。
在此先感謝!
謝謝,這工作,並減少了我的時間 – john324156
使用begin transaction(之前)和commit(在所有工作之後)。如果你沒有明確地啓動一個事務,那麼對於你的每個命令,SQL都會隱式地啓動一個事務並完成它,延遲進程(所以80k行意味着80k單獨的轉換,而所有命令都應該在一個事務中運行)。
你應該嘗試使用的BackgroundWorker ... 它幫助我,當我不得不做出大的查詢......
我已經在使用backgroundWorker,所以我的GUI不會崩潰。我真的只是想優化速度。 – john324156
有SQL批量複製操作(http://msdn.microsoft.com /en-us/library/7ek5da1a%28v=vs.110%29.aspx),或者如果您使用的是EntityFramework 6.0或更高版本,則可以使用'DbSet .AddRange()'方法將實體添加到塊。 –
@martin_costello,這就是它。將該評論粘貼到答案中 – paqogomez
我不知道AddRange做了大量複製 – Jonesopolis