我有一个包含超过60个Nvarchar(max)字段的表,我需要将表复制到另一个带有ssis的数据库。
我禁用了所有索引并且它有所帮助,但是仍然需要花费大量时间来复制所有表(超过1M行) - 这一刻需要一个小时。
有人有想法让它跑得更快吗?
答案 0 :(得分:0)
根据我的经验,加载大数据的最快方法是使用批量插入。这通常是从平面文件完成的,因此在执行批量插入之前,必须先将数据导出到文件中。
如果您不喜欢平面文件方法,则可以选择编写CLR例程。您可以使用SqlDataReader从存储DataTable中的数据的表中读取,然后使用SqlBulkCopy执行批量插入。这种方法的优点是您可以使用缓冲系统来限制所需的内存。 SqlDataReader是内存高效的,它根据需要读取行,然后从内存中删除它们,而DataTable则不行。因此,您为自己设置了一个限制,比如10,000行,每当DataTable达到此限制时,您执行SqlBulkCopy并删除DataTable中的现有行并继续下一批。