“运行一次”大量数据插入...本地VS网络连接?

时间:2012-11-28 15:38:35

标签: .net sql-server optimization entity-framework-4

所以我有一次这样的交易,我必须从不同的数据库/表中获取数据,切片并切块并将其插入一个表中。

这是通过Windows Form C#.NET 4.0应用程序完成的。

我必须为我们将在CRM环境中使用的每个不同实体运行一次这样的交易流程(显然)。

对于某些实体,只需插入20,000行,因此网络SQL连接就可以了。

但另一个是80万长,需要很长时间才能完成。

我想知道我是否通过在SQL Server上安装应用程序并在我的连接字符串中指定本地连接而不是联网字符串来获得任何速度。

我必须提出正式请求才能获得对该服务器的远程桌面访问权限,这就是为什么我要问其他人是否曾在实际测试之前成功使用过这种方法。

另外,我正在通过Entity Framework 4的SaveChanges()进行插入,我在每个插入的行中调用它。也许,那里也有优化空间,我愿意阅读你的意见。

非常感谢!

2 个答案:

答案 0 :(得分:4)

任何时候你可以消除网络,你会看到性能提升。对于800k行,我会使用SqlBulkCopy类。它非常易于使用,它基本上相当于封面下的BULK INSERT。

答案 1 :(得分:1)

除非所有数据库/表都在同一台服务器上,否则不会获得太多。如果您在同一个物理盒上执行了插入操作,那么这会增加插入速度,但您仍然可以在读取中使用网络。

一次插入一行是最慢的本地或远程插入。

查看SqlBulkCopy(+1 Philip),TVP或Drapper以优化插入。

切片和骰子?这有多复杂?它需要.NET吗?可以用TSQL完成吗?