规范化数据 - 使用循环进行批量插入

时间:2009-05-19 08:54:27

标签: ms-access vba bulkinsert

是否有人有任何提示可以帮助加快分解表并将大量记录插入新表的过程。

我目前正在使用Access和VBA将包含大字符串(700 +字符)的记录的表转换为新表,其中每个字符都有自己的记录(行)。我这样做是通过循环遍历字符串1字符并使用VBA中的简单DAO插入新表。

目前我正在处理一小部分数据 - 每条记录包含700个字符的300条记录。此过程大约需要3个小时才能运行,因此不会扩展到50,000个记录的完整数据集!

表1结构

id - 字符串 001 - abcdefg

变为

表2结构

id - 字符串 001 - a 001 - b 001 - c 。 。 。 。 。

我愿意接受任何可以改善事情的建议。

干杯

菲尔

3 个答案:

答案 0 :(得分:1)

使用Northwind考虑这个例子。使用INTEGER(Access = Long Integer)创建一个名为Sequence的表,并使用值1到20(即20行表)填充它。然后使用此ACE / Jet语法SQL代码解析员工姓氏的每个字母:

SELECT E1.EmployeeID, E1.LastName, S1.seq, MID(E1.LastName, S1.Seq, 1)
  FROM Employees AS E1, Sequence AS S1
 WHERE S1.seq BETWEEN 1 AND LEN(E1.LastName);

答案 1 :(得分:1)

进行批量插入时,通常可以通过删除表的索引,执行批量插入,然后还原索引来获得显着的性能提升。在一种情况下,当将几百万条记录插入MySQL表时,我看到这会将运行时间从17小时降低到大约20分钟。

我不能具体提出有关Access的建议(我从Access 2,15年前就没有使用它),但一般技术几乎适用于任何数据库引擎。

答案 2 :(得分:0)

我们有一个转换数据的例程。不确定代码是否已经过优化,但在压缩文件后运行速度要快得多。

执行大量删除和重建表会显着增加.mdb文件。