【发布时间】:2017-07-26 04:45:32
【问题描述】:
我有一个包含 60 多个 Nvarchar(max) 字段的表,我需要使用 ssis 将该表复制到另一个数据库。
我禁用了所有索引,这有点帮助,但复制所有表(超过 1M 行)仍然需要很长时间 - 现在需要一个小时。
有没有人想办法让它跑得更快?
【问题讨论】:
我有一个包含 60 多个 Nvarchar(max) 字段的表,我需要使用 ssis 将该表复制到另一个数据库。
我禁用了所有索引,这有点帮助,但复制所有表(超过 1M 行)仍然需要很长时间 - 现在需要一个小时。
有没有人想办法让它跑得更快?
【问题讨论】:
根据我的经验,加载大数据的最快方法是使用批量插入。这通常是从平面文件中完成的,因此您必须先将数据导出到文件中,然后再执行批量插入。
如果您不喜欢平面文件方法,另一种方法是编写 CLR 例程。您可以使用 SqlDataReader 从将数据存储在 DataTable 中的表中读取,然后使用 SqlBulkCopy 进行批量插入。这种方法的优点是您可以使用缓冲系统来限制所需的内存。 SqlDataReader 具有内存效率,它根据需要读取行,然后将它们从内存中删除,而 DataTable 不是。因此,您为自己设置了一个限制,例如 10,000 行,每当 DataTable 达到此限制时,您就执行 SqlBulkCopy 并删除 DataTable 中的现有行并继续下一批。
【讨论】: