sql – 增加Ms Access Insert性能

前端之家收集整理的这篇文章主要介绍了sql – 增加Ms Access Insert性能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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

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

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

附:
我无法切换到sql Server,这绝对不可能.我知道它可以以更优化的方式通过sql server完成,Access不应该用于WAN,但我没有那个选项.

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

解决方法

如果你现在有
S = "SELECT SomeId,SomeBoolean,SomeOtherBoolean " & _
    "FROM recTable WHERE someCriteria"
Set rec = DB.OpenRecordset(S)

将你的陈述改为

"INSERT INTO TransportationDetails (TransportationId,SomeId) " & _
"SELECT " & vTransportationId & ",SomeId " & _
"FROM recTable WHERE someCriteria"

"UPDATE recTable SET SomeBoolean = SomeOtherBoolean WHERE someCriteria"

为了提高性能,请尽可能避免在Recordset上循环.使用对整个集合进行操作的sql语句.

原文链接:https://www.f2er.com/mssql/83610.html

猜你在找的MsSQL相关文章