0

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

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

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

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

但这另一个是 800,000 长,需要很长时间才能完成。

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

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

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

非常感谢!

4

2 回答 2

4

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

于 2012-11-28T15:42:37.540 回答
1

除非所有数据库/表都在同一台服务器上,否则不会有太多收获。如果您在同一个物理盒子上执行插入,是的,这会提高插入速度,但您仍然有网络在读取。

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

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

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

于 2012-11-28T15:56:40.387 回答