0

到目前为止,我一直从 Access DB 将 5K 和 15K 记录分别上传到本地托管的 SQL Server(同一建筑物),它们分别花费了大约 30 和 60 秒。

现在,我被踢出本地服务器(<5ms ping)并被迫迁移到美国的一台,它有 160ms 的 ping 时间。

上传现在需要 30 分钟和 90 分钟以上。我正在使用带有链接表的非常标准的 INSERT INTO 运行。提供一些快速的上下文。我收到一个批量文件,我必须对其进行过滤、选择特定列,然后复制/粘贴到 Access DB(所有文本(255))中,然后使用记录集将它们复制到具有特定数据类型字段和约束的类似表中以更改/清理一些领域等...

我需要回到更合理的上传时间,分别不超过 5 分钟和 10 分钟。使用服务器当前的 ping 时间,我看不到 INSERT INTO 语句会发生这种情况,因为我猜测延迟会影响每条记录的上传,因此寻找一种批量上传的方法或您可以建议的任何其他方式可能会改善这些时候。

4

2 回答 2

1

由于您使用的是 SQL Server,您是否尝试过 IMPORT 功能而不是使用链接表?我认为您将获得严重的性能改进。

在 SSMS 中,右键单击数据库名称,转到 TASKS / IMPORT

这使用 SSIS 而不是链接表。

如果您喜欢导入显示的速度(而且我发现它非常快),那么您可以创建一个 SSIS 包并使用它来上传数据,并从命令提示符处执行它。

于 2012-12-13T15:27:20.470 回答
0

如果您不介意使用 C#/VB.NET,可以将 Access 数据加载到 DataTable,然后使用 SqlBulkCopy 将数据上传到 SQL Server。

  1. 通过 OleDb 打开与 Access DB 的连接。MSDN 有一个例子。您可以跳过加载后的所有内容。

  2. 设置表映射,然后上传数据。MSDN 有一个很好的、简洁的例子

这种方法非常快 - 我有一个批量上传过程,可以在 3 秒内上传 100k 行。我的行相当小,数据/服务器在同一台机器上,所以它处于最佳状态,但在大多数情况下我发现它非常快。见下面的注释

如果您遇到问题,我可以绘制一个快速的代码示例。

埃里克

编辑

性能来自表值参数的使用。在程序中使用它是我的偏好,但您可以在 SQL 中使用它。它具有批量插入和传统插入的属性。它出现在 2008 年后的所有 SQL 版本中。

于 2012-12-13T17:36:22.530 回答