填充数据库表的最快方法,包含1000万行

时间:2009-11-19 20:38:28

标签: database performance language-agnostic

用1000万行填充数据库表的最快方法是什么?我问的是这个技术,还有任何特定的数据库引擎,它可以让你尽快做到这一点。我并不要求在这个初始数据表填充期间索引这些数据。

5 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:2)

最快的 方法可能正在运行带有SELECT FROM的INSERT sql语句。我生成了测试数据,以便从其他数据库甚至同一个数据库中多次填充表。但这一切都取决于您自己的数据的性质和可用性。在我的情况下,我有足够的行收集数据,其中一些选择/插入例程与随机行选择半智能地应用于实际数据快速产生了不错的测试数据。在某些情况下,表数据唯一地标识我使用的中间表和频率分布排序来消除诸如罕见名称之类的事项(已消除的实例,其中group by的计数小于或等于2)

此外,Red Gate实际上提供了一个实用程序,可以满足您的要求。它不是免费的,我认为它是特定于Sql Server的,但它们的工具是一流的。非常值得的。还有一个免费试用期。

如果您不想付费或他们的实用程序,您可以想象很快建立自己的。无论如何,他们所做的并不是魔术。一个体面的开发人员应该能够在一两天内淘汰类似功能的应用程序的alpha / hardcoded版本......

答案 2 :(得分:1)

您可能对此question的答案感兴趣。它着眼于将大量CSV文件上载到SQL Server(2005)数据库。对于SQL Server,似乎SSIS DTS包是将数据批量导入数据库的最快方法。

答案 3 :(得分:1)

这完全取决于你的数据库。例如,Oracle有一个称为直接路径加载(http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch09.htm)的东西,它可以有效地禁用索引,如果我理解正确的话,构建将在-client-侧写入磁盘而不是发送SQL的二进制结构。 。

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

答案 4 :(得分:0)

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