2010-05-25 109 views
7

我的数据库中有5-6个表,我需要用测试数据填充以在我的应用中测试性能。什么是将60m记录导入SQL的最快方法

我可以编写代码并做一个批量插入我的预测是,它将需要近3天的时间才能运行,所以我认为必须有一个更快的方法。

任何想法?

+0

甜蜜的耶稣,3天的Sql INSERTS ...你能想象如果你必须通过Web界面通过文件上传(例如PhpMyAdmin,SQL-Web-Admin)来喂食...祝你好运。 – Dal 2010-05-25 11:30:51

+2

千万不要使用应用程序语言来完成数据库的工作,也不要使用数据库来完成应用程序语言的工作,而这是数据库的工作。 – 2010-05-25 11:45:44

回答

1

SSIS是一种方法,但是您要么使用大容量插入任务,要么循环访问文件并调用INSERT INTO语句。有BCP可用。

+0

我正在考虑这个。 BCP要快得多吗? – Jon 2010-05-25 09:14:53

+0

BCP不是比BULK INSERT更快。看到这个链接:http://msdn.microsoft.com/en-us/library/aa178096(SQL.80).aspx – 2010-05-25 09:30:26

+0

谢谢,奇怪我一直认为BCP更快 – Jon 2010-05-25 09:46:44

3

根据您生成数据的方式,SSIS可能是插入数据的最佳方式。

此外,请确保在可能的情况下关闭所有触发器,然后删除尽可能多的索引,然后重新添加它们。

0

使用recursive CTEs生成和一次插入行的巨额:

with table1Test 
as (
-- 
-- generate some test rows 
-- 
) 
insert into table1 select ... from table1Test 
1

BCP是非常非常快的,而且并不难使用,也可以从一个批处理文件,简单,快速地运行之后。

SSIS,超级,你可以用分支和决策树建立漂亮的脚本。

对于一次性的情况,两者的速度都是相似的。

你会对如何处理6000万的事实感到震惊。使用一个整齐的BCP批处理文件,您可以导入,然后修改,导出新数据,并创建不同的测试数据集。所有将在几秒或几分钟内工作。还请记住,如果您需要为bcp指定一个格式文件,一种方法是将两个记录键入表中,然后从该表导出bcp,从而允许bcp生成fmt文件。现在你有了这个文件,你可以使用它导入。

好运,

马克·布林 爱尔兰 BMW R80GS 1987

0

你可以看看展鹏的工具,它们有一个称为数据发生器。它可以帮助您不必编写自己的脚本,并且我确信它们对插入速度有某种程度的优化。

(免责声明,我没有与Redgate联系,就像软件一样)。

1

通过事先禁用索引插入大量数据可以节省大量时间,并在完成时重新启用它们。在添加每一行时,它需要不断重新平衡索引,有时会分割页面等。最好是跳过一堆重复的操作,并在插入完成后让它执行一次工作。

如果你很勇敢并且确信数据是正确的,那么也可以杀掉任何外键关系,并在完成时添加它们。否则,它将执行查找以检查插入的每一行中每个FK值的有效性。其他限制也一样。

相关问题