到目前为止,我一直在从Access数据库中将5K和15K记录分别上传到本地托管的SQL Server(同一建筑物),它们分别花了大约30秒和60秒。
现在,我已经离开了本地服务器(< 5ms ping)并被迫迁移到美国的一个,其中有160毫秒的ping时间。
上传现在需要30分钟和90分钟+。我正在使用一个非常标准的磨机INSERT INTO和链接表。给出一些快速的背景。我收到一个批量文件,我必须过滤,选择特定列,然后复制/粘贴到Access DB(所有文本(255)),然后使用记录集将它们复制到具有特定数据类型字段和约束的类似表中以更改/清理一些领域等...
我需要回到更合理的上传时间,分别不超过5分钟和10分钟。使用服务器当前的ping时间,我无法看到INSERT INTO语句发生这种情况,因为我猜测每条记录的上传时间滞后,因此寻找一种批量上传方式或任何其他可以提示可能改进的方式这些时候。
答案 0 :(得分:1)
由于您使用的是SQL Server,您是否尝试过使用IMPORT功能而不是使用链接表?我认为你会得到严重的性能提升。
在SSMS中,右键单击数据库名称,转到TASKS / IMPORT
这使用SSIS而不是Linked表。
如果您喜欢导入显示的速度(并且我发现它非常快),那么您可以创建一个SSIS包并使用它来上传数据,并从命令提示符执行它。
答案 1 :(得分:0)
如果您不介意深入了解C#/ VB.NET,可以将Access数据加载到DataTable中,然后使用SqlBulkCopy将数据上传到SQL Server。
通过OleDb打开与Access DB的连接。 MSDN has an example。您可以跳过加载后的所有内容。
设置表映射,然后上传数据。 MSDN有一个很好的,简洁的example。
这种方法非常快 - 我有一个批量上传过程,可以在不到3秒的时间内上传100k行。我的行相当小,数据/服务器在同一台机器上,所以它处于最佳状态,但在大多数情况下我发现它非常快。 请参阅下面的说明
如果遇到问题,我可以草拟快速代码示例。
埃里克
修改强>
表现来自Table Valued Parameters的使用。从程序中使用它是我的首选,但您可以在SQL中使用它。它具有批量插入和传统插入的属性。它出现在2008年后SQL的所有版本中。