我在我的数据库中有5-6个表需要填充测试数据,以测试我的应用程序的性能。
我可以编写代码并进行批量插入,但我预测这将需要近3天的时间运行,因此我认为必须有更快的方法。
有什么想法吗?
我在我的数据库中有5-6个表需要填充测试数据,以测试我的应用程序的性能。
我可以编写代码并进行批量插入,但我预测这将需要近3天的时间运行,因此我认为必须有更快的方法。
有什么想法吗?
根据您生成数据的方式,SSIS可能是插入数据的最佳途径。
此外,请尽可能关闭所有触发器并删除尽可能多的索引,之后再重新添加它们。
SSIS是一种方法,但您将使用Bulk Insert任务或循环遍历文件并调用INSERT INTO语句。也可以使用BCP。
BCP非常快速,使用起来也不是那么困难,而且你可以简单快速地从批处理文件中运行它。
SSIS超级强大,你可以构建带有分支和决策树的漂亮脚本。
对于一次性情况,两者的速度将相似。
你会惊讶于它如何快速地处理6000万。通过一个整洁的BCP批处理文件,你可以导入、使用SQL进行修改、导出新数据,并创建不同的测试数据集。所有这些都可以在几秒钟或几分钟内完成。
还要记住,如果你需要为bcp指定格式文件,一种方法是在表中键入两条记录,然后从该表中导出bcp,允许bcp生成fmt文件。现在你有了这个文件,你可以使用它进行导入。
祝你好运,
马克·布林 爱尔兰 BMW R80GS 1987
在插入大量数据时,通过事先禁用索引并在完成后重新启用它们,可以节省大量时间。当添加每一行时,它需要不断地重新平衡索引,有时还会分裂页面等。最好跳过一堆重复的操作,让它在插入完成后只做一次工作。
如果您勇敢并且确定数据是正确的,您还可以删除任何外键关系,并在完成后重新添加它们。否则,它将查找每个插入的行中每个FK值的有效性。其他约束条件也是如此。
使用递归CTE一次生成和插入大量行:
with table1Test
as (
--
-- generate some test rows
--
)
insert into table1 select ... from table1Test