【问题标题】:Copy Large Data between two different recordsets in the fastest possible way以最快的方式在两个不同的记录集之间复制大数据
【发布时间】:2016-09-10 09:58:57
【问题描述】:

我在两个不同的位置有两个数据库,我使用以下代码将数据从位置 A 复制到位置 B 的表中

set rst1 = conn.execute ("Select A1,A2,A3 from Tickets")
do until rst1.eof
conn2.execute ("Insert into Tickets values (rst1!A1, rst1!A2, rst1!A3)")
rst1.movenext
loop

现在数据库已经增长到超过 100 万条记录,在将数据复制到位置 B 时,它需要很长时间才能遍历所有记录

位置 A 和位置 B 中名为“Tickets”的数据库表是相同的,我可以使用哪些方法以最快的方式将位置 A 中的所有数据复制到位置 B,而无需遍历所有数百万条记录每次。

谢谢

【问题讨论】:

  • 你试过使用存储过程吗?
  • 否.....我如何在两个数据库实例之间做到这一点。位置 A 是通过 Internet 从位置 B 访问的,所以我想基本上从 Internet 上两个不同数据库实例之间的两个相似表中复制数据。

标签: sql-server sql-server-2008 vb6


【解决方案1】:

您可以使用批量复制和插入,这将比基于事务的插入查询更快:

bcp AdventureWorks2012.Sales.Currency out "Currency Types.dat" -T -c

类似的批量插入

BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail  
 FROM '\\computer2\salesforce\dailyorders\neworders.txt'

这会更快,因为它不是基于事务的

https://msdn.microsoft.com/en-us/library/ms175937.aspx

【讨论】:

  • 您能否提供一个参考,说明此选项实际上比 OP 当前使用的更快?
  • 据我了解,bcp 对事务日志的作用不大,而常规插入对事务日志的写入作用很大stackoverflow.com/questions/6793845/why-is-bcp-so-fast
  • 很公平,只是认为有一个更快的理由会有所帮助。
猜你喜欢
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 2010-09-14
相关资源
最近更新 更多