增加Ms Access插入性能

Seg*_*ult 4 sql ms-access insert ms-access-2010 query-performance

我正在使用MS Access 2010,分为前端/后端; 在具有16+表的网络驱动器(WAN)上,其中一个用户(130万)主要用于用户信息,并且不会插入重量很少的其他表,每天最多可以接收2000多个表.

我已经能够优化大多数读/选查询.虽然我的代码的一大块如下所示.这可以每天用于最多2000次迭代.

Do Until rec.EOF
    Dim vSomeId As Integer
    vSomeId = rec!SomeId

    'StrSQL = StrSQL & "INSERT INTO TransportationDetails ( TransportationId, SomeId)" & _
        '"VALUES(" & vTransportationId & ", " & vSomeId & ");"

    StrSQL = "INSERT INTO TransportationDetails ( TransportationId, SomeId)" & _
        "VALUES(" & vTransportationId & ", " & vSomeId & ");"

    DoCmd.SetWarnings False
    DoCmd.RunSQL (StrSQL)
    DoCmd.SetWarnings True


    rec.Edit
    rec!SomeBoolean = rec!SomeOtherBoolean 
    rec.Update
    rec.MoveNext
Loop
Run Code Online (Sandbox Code Playgroud)

我的目标是减少调用db以插入所有值的次数.并且MS ACCESS不支持在语句中包含多个查询,正如我在代码的注释部分中尝试的那样.我还认为记录集upate方法耗费大量时间,如果任何人可以建议更新记录集的更好方法.

是否有什么办法可以欺骗访问插入和更新在少命中DB通过SQL查询,或任何其他访问功能.或者无论如何优化,有时可能需要长达30分钟.减少到至少2-5分钟是合适的.

PS我不能切换到SQL Server,它是不可能的.我知道它可以以更优化的方式通过sql server完成,而Access不应该用于WAN,但我没有那个选项.

解决方案:我选择了Andre和Jorge的解决方案.时间减少了17倍.虽然Albert的答案也是正确的,因为我发现我的主要问题是循环中的sql语句.将记录集中的编辑更改为sql并不会对时间因素产生太大影响.

Alb*_*lal 8

我应该指出,在插入行的情况下,通过使用记录集,您会发现FAR性能更好.如果您对一组数据进行操作,SQL"操作"查询只会执行得更好.您插入行的那一刻,那么您没有"set"插入,并且使用DAO记录集将获得更好的性能(比10到100倍更好).

  • 好建议(像往常一样).我只是做了一个快速测试,2000个SQL INSERT花了24秒,而2000 DAO.Recordset AddNew插入到同一个表中花了不到0.2秒. (2认同)