2015-11-14 57 views
-4

道歉,如果我愤怒与论坛重复的问题。无法在论坛中找到正确的解决方案,因此发布了它。SQL Server 2012:快速从SELECT中插入数百万行

我需要快速获取129991763行到游标或临时表或临时表中,并将它们处理到另一个表中。而这个目的地桌子也是巨大的桌子。

目前我使用INSERT使用SELECT声明(该SELECT嵌套4级),用于提示选项一样(FAST 1000),MAXDOP 1,重新编译...等...

该过程消耗大量的时间,并没有显示任何结果或根本没有完成。

以前我用了一个提示相同的提示;但它也运行了22个多小时;我转换到INSERT使用SELECT

从字面上看,我需要停止执行以上两种方法。

说实话,我是SQL Server数据库的初学者。

即使根据标准特别筛选出SELECT中的记录;仍然需要打破4或5个块,这些块需要花费4到5个小时才能完成。

请帮忙。

感谢 Pradyumna

+3

那么,你的问题是什么? –

+0

尝试从129,991,763条记录中创建约1300批,每行约100,000行。不要使用游标。您还需要验证您的查询是否未被其他进程阻止。如果你的目标表有索引,你可以考虑根据已经存在的行与要插入的行的比例来删除它。 –

+0

尝试禁用或删除目标表上的所有索引和外键约束;确保**数据库文件**足够大以容纳所有数据,以便它不必不断地扩展大小。但插入**数百万行**永远不会闪电般快 - 它会花费时间** - 你不能“优化”那段时间。 –

回答

0

在我使用BULK INSERT合理成功的过去,但我怀疑分解成块,并删除索引仍然是明智的建议。你可以在上面找到一些细节在这里

https://msdn.microsoft.com/en-GB/library/ms188365.aspx

希望它能帮助,祝你好运。

+0

感谢您的帮助;想要使用SELECT从多个表中加载数据。我很抱歉,我会在这里错误的。 SQL Server2012中的BULK INSERT将用于平面文件。我正在寻找使用SELECT的INSERT。是的,索引被删除。正如你所建议的将进程分成批/块。我要求将其分批分批给予延长帮助。 –

0

道歉,你可能会最好使用SSIS包来拉它。有了这个,您还可以根据需要转换数据。我仍然建议您将索引从要插入数据的表中尽可能地移除。由于使用GUI,您需要阅读一些内容,但很难在此解释。

祝你好运

相关问题