【发布时间】:2013-06-17 07:16:07
【问题描述】:
我需要使用 VB6 和 MS Access 数据库处理数十万条记录。我遍历记录集并编辑每条记录。然而,这样做需要很多时间。使用 Addnew 和 Update 方法创建具有相同数量记录的数据库的速度要快得多。
如果有人向我展示任何代码示例或只是一个策略,我将不胜感激。
这里是代码
Data1(1).RecordSource = "Select * from TABLE order by Field_A ASC"
Data1(1).Refresh
If Data1(1).Recordset.RecordCount > 0 Then
Data1(1).Recordset.MoveFirst
Do
Data1(1).Recordset.Edit
Data1(1).Recordset.Fields("FIELD") = Sort_Value
Data1(1).Recordset.Update
Data1(1).Recordset.MoveNext
Loop Until Data1(1).Recordset.EOF = True
End If
这真的很简单。真正的事情是,我忘了提到,计算机的硬盘不断红/写。这实际上是问题所在。负载如此之大,无法不影响性能。
我首先想到的是查询生成的记录集,记住我们有 1-2 百万条记录,导致了这个问题。我猜它位于硬盘驱动器和 RAM 中的某个临时位置。所以执行 .Edit 和 .Update 可能是先将光标定位在正确的位置然后写入的问题。
不确定。可能会有专家给我指路。
顺便说一句。我也尝试更换 循环直到 Data1(1).Recordset.EOF = True 具有固定长度循环的语句,因为我也读到过,这种对 Recordset.EOF 的检查也会降低性能。
提前谢谢你!
【问题讨论】:
-
分享您的代码、UPDATE 语句等会有所帮助
-
使用事务而不是每次都编写更新会明显更快,请在此处查看我的示例答案:stackoverflow.com/questions/12930603/…
-
我为你开始了赏金,因为我自己对此很好奇。如果您可以编辑您的帖子以包含您当前使用的代码,它可能会帮助人们发现您的代码的弱点。
-
如果你不向我们展示(或至少告诉)你在做什么,你真的很难说你应该如何提高你正在做的事情的速度首先。 “我怎样才能让我的代码更快?我不会向你展示它,甚至不会告诉你它究竟做了什么。你能帮帮我吗?”
-
显然您正在使用带有 DAO 的数据控件来更新您的记录。摆脱那个数据控制,只使用普通的记录集。如果不需要,也删除
Order By。然后重试。