2009-11-19 40 views
4

用10万行填充数据库表的最快方法是什么?我正在询问这种技术,但也想了解任何特定的数据库引擎,以便尽可能快地实现这一点。我“米不要求这个数据这个初始数据表人口中建立索引。用10万行填充数据库表的最快方法

+0

您能详细说明您尝试填充数据库的数据的性质吗?如果是垃圾数据,只需在服务器上运行功能来插入虚拟行。如果数据被困在文件中,请考虑供应商特定的批量导入/ bcp工具。 – 2009-11-19 22:42:23

+0

我现在所拥有的:Firebird数据库,为了测试目的想要填充数据。 – luvieere 2009-11-19 23:06:10

回答

7

使用SQL将大量数据加载到数据库通常会导致较差的性能。为了快速完成任务,您需要绕过SQL引擎。大多数数据库(包括我认为的Firebird)都能够将所有数据备份到文本(或可能是XML)文件中,并从这样的转储文件恢复整个数据库。由于恢复过程不需要事务感知,并且数据不表示为SQL,因此通常非常快速。

我会写一个手动生成转储文件的脚本,然后使用数据库的恢复实用程序来加载数据。

经过一番搜索,我发现FBExport,似乎能够做到这一点 - 你只需要生成一个CSV文件,然后使用FBExport工具将该数据导入到数据库中。

0

使用MySQL或MS SQL和嵌入式功能,生成的数据库引擎中的记录,或者生成一个文本文件(像格式CVS)和然后使用批量复制功能。

2

最快方法可能是与SELECT运行的INSERT SQL语句而来。我已经生成的测试数据来填充其他数据库中的表,甚至在同一个数据库的次数。但这一切都取决于你自己的数据的性质和可用性。在我的情况下,我有足够的行数据收集数据,其中有几个选择/插入程序随机行选择应用程序用巧妙的方法对真实数据进行编辑,可以快速获得体面的测试数据。在某些情况下,表中的数据被唯一地识别我用中间表和频率分配排序,以消除等不常见的名称的东西(消除实例,其中通过用组计数是小于或等于2)

此外,Red Gate实际上提供一个实用程序来完成你所要求的功能。这不是免费的,我认为这是Sql Server特有的,但他们的工具是顶尖的。这是值得的成本。还有一个免费试用期。

如果你不想支付或他们的实用程序,你可以想象建立你自己很快。他们所做的一切都不是魔术。一个体面的开发人员应该能够在一两天内敲出一个类似功能的Alpha /硬编码版本的应用程序...

1

您可能对这个question的回答感兴趣。它会将大量的CSV文件上传到SQL Server(2005)数据库。对于SQL Server,似乎SSIS DTS包是将数据批量导入数据库的最快方式。

1

它完全取决于你的数据库。例如,Oracle有一些名为direct path load(http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch09.htm)的东西,它可以有效地禁用索引,并且如果我理解正确,则会构建将写入到客户端磁盘的二进制结构,而不是发送SQL。

结合每个分区的分区和重建索引,我们能够以相对较短的顺序加载10亿行(我不小孩)数据库。 1000万行是没有的。

相关问题