Sql server SQL Server 2012:快速从SELECT中插入数百万行

Sql server SQL Server 2012:快速从SELECT中插入数百万行,sql-server,sql-server-2012,Sql Server,Sql Server 2012,如果我用重复的问题激怒论坛,我道歉。在论坛中找不到正确的解决方案,因此将其发布 我需要快速地将129991763行提取到游标、临时表或临时表中,并将它们处理到另一个表中。这个目的地表也是一个巨大的表 目前我正在使用INSERT使用SELECT语句(选择SELECT嵌套了4个级别),使用了选项(FAST 1000)、MAXDOP 1、重新编译等提示 这个过程耗费了大量的时间,没有结果,或者根本没有完成 之前,我使用了一个光标与相同的提示;但由于它也运行了22个多小时,;我使用SELECT切换到IN

如果我用重复的问题激怒论坛,我道歉。在论坛中找不到正确的解决方案,因此将其发布

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

目前我正在使用
INSERT
使用
SELECT
语句(选择
SELECT
嵌套了4个级别),使用了选项(FAST 1000)、MAXDOP 1、重新编译等提示

这个过程耗费了大量的时间,没有结果,或者根本没有完成

之前,我使用了一个光标与相同的提示;但由于它也运行了22个多小时,;我使用
SELECT
切换到
INSERT

实际上,我需要停止执行上述两种方法

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

即使专门过滤掉
中的记录,也要根据标准选择
;但这个过程仍然需要分解4到5个块,这些块也需要4-5个多小时才能完成

请帮忙

谢谢
Pradyumna

在过去,我使用了批量插入,取得了合理的成功,但我怀疑将其分块并删除索引的建议仍然是明智的。你可以在这里找到一些细节


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

抱歉,你最好使用SSIS包来完成它。有了它,您还可以根据需要转换数据。我仍然建议尽可能避免将数据插入表中的索引。由于GUI的使用,您需要进行一些阅读,但此处很难解释


祝你好运

那么,你的问题是什么?试着从129991763条记录中创建大约1300批,每批大约100000行。不要使用光标。您还需要验证您的查询是否未被其他进程阻止。如果您的目标表具有索引,则可以考虑根据已插入行的行的比率将其丢弃。尝试禁用或删除目标表上的所有索引和外键约束;确保数据库文件足够大以容纳所有数据,这样它就不必不断扩展大小。但是插入数百万行永远不会是闪电般的快——这需要时间——你不能“优化”这段时间。@ShantanuGupta:很抱歉激怒了你。再来一点小帮助。同意我问你一个基本问题。请您指导我如何将SELECT语句分成若干批。我一定会用的。它甚至可以用来打印以控制是否插入了任何记录。是的,我们正在删除目标表上的索引。恐怕我们没有足够的信息来帮助您;你需要在当地做更多的调查来找出瓶颈是什么,因为有太多我们无法猜测的因素。问题可能是您的数据正在缓慢的网络链接上运行,或者您的查询代码写得不好,或者FAST 1000提示正在减慢速度,或者与您的集群密钥有关,或者是其他数百个原因中的任何一个。在不知道您的查询、数据、基础架构、查询计划、I/O统计数据的情况下,我们只是猜测而已;希望使用SELECT从多个表加载数据。对不起,我错了。SQL Server 2012中的大容量插入将用于平面文件。我正在寻找使用选择插入。是的,索引被删除。正如您所建议的,将流程划分为批/块。我请求更多的帮助,将其分为若干批。