VB6 UPDATE到表时的访问速度

时间:2014-03-03 07:13:48

标签: sql vb6

我知道VB6有点过时,但那是我继承的应用程序。

我必须根据访问表的数组结果进行更新。

数组包含double和要更新的记录的id。

问题在于有120,000条记录需要更新,但在测试中,只需要60秒就可以在374条记录上运行它。

这是我的更新代码

Dim oCon As New ADODB.Connection
Dim oRs As New ADODB.Recordset
Dim string3 As String
oCon.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & App.Path &"\hhis.mdb;Pwd=/1245;"

oCon.BeginTrans

For i = 0 To maxnumberofrecords - 1

string3 = "UPDATE YourRatings SET yourRatings=" & YourTotalRatingsAll(i) & " Where thisID = " & thisID(i) & ";"

oRs.Open string3, oCon, adOpenStatic, adLockOptimistic

Next i
oCon.CommitTrans
oCon.Close

我根据我读过的其他一些文章添加了“CommitTrans”,但这似乎没有提高速度。

另一个问题是我将不得不运行另一个查询来排名最高(1)到最低(374)并再次更新数据库...虽然我可以对数组做一些事情来添加该列在同一时间。

这对我来说似乎很慢,特别是当其他人在14秒内提到200000条记录时。

我错过了什么吗? 从文本文件加载会更快吗?

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

使用Open始终构建新的ResultSet对象。尝试oCon.execute string3,它只将SQL发送到您的数据库,而不会产生ResultSet开销。

确保您在thisID上有索引。

也许您的Access数据库位于网络驱动器上。这可能会产生很大的性能影响。在当地尝试。

答案 1 :(得分:3)

为什么使用蹩脚的旧Access桌面ODBC驱动程序而不是Jet 4.0 OLEDB Provider?

为什么要打开Recordset来执行UPDATE而不是在Connection上调用Execute?

是否有任何理由无法打开数据库以进行独占访问以执行此操作?锁定开销几乎被消除,像“BeginTrans / CommitTrans”这样的“货物崇拜”技术失去了任何意义。

表格中的thisID字段是否有索引?

请尽快移至魔术子弹.Net。你的程序会更慢,但我们不必阅读所有指责VB6的行为。

答案 2 :(得分:0)

只是要添加到Wumpz的答案,您可能只想尝试将查询直接添加到Access数据库并使用参数调用它。 This SO thread更多地谈论它。

参数比注射更稳定,更不易破解。