Ms access Access 2007 First cn.Execute语句非常慢

Ms access Access 2007 First cn.Execute语句非常慢,ms-access,ms-access-2007,Ms Access,Ms Access 2007,我目前正在Access 2007中使用拆分FE和BE处理一个应用程序。FE是网络共享上的本地设备。为了消除在网络上使用链接表时发现的一些问题,我正在尝试使用ADO通过VBA加载两个临时表,当应用程序第一次使用cn.Execute INSERT INTERT INTERTENTABLE1 SELECT*从LinkedTable1和cn.Execute INSERT INTERT INTERTENTABLE2 SELECT*从LinkedTable2加载时,数据来自两个链接表 LinkedTable

我目前正在Access 2007中使用拆分FE和BE处理一个应用程序。FE是网络共享上的本地设备。为了消除在网络上使用链接表时发现的一些问题,我正在尝试使用ADO通过VBA加载两个临时表,当应用程序第一次使用cn.Execute INSERT INTERT INTERTENTABLE1 SELECT*从LinkedTable1和cn.Execute INSERT INTERT INTERTENTABLE2 SELECT*从LinkedTable2加载时,数据来自两个链接表

LinkedTable1中有45552条记录,LinkedTable2中有45697条记录

第一个execute语句的执行时间为50-85秒。但是,第二个execute语句所用的时间不超过9秒。这些时间是一致的。为了查看其中一个表是否存在问题,而不是另一个表,我在代码中切换了语句的顺序,结果仍然是第一次执行太长,第二次执行非常快。作为补充说明,我还使用CurrentDB.Execute命令尝试了DAO,但没有得到不同的结果。如果第一个语句处理的记录比第二个语句多,那么这对我来说是有意义的,但是尽管数量很少,第二个表比第一个表有更多的记录

有人对为什么会发生这种情况和/或如何使第一个execute语句加快速度有什么建议吗

提前谢谢!
ww

您在两个临时表上定义了哪些索引,以及主键定义?在添加数据时更新索引可能是一个表速度较慢的原因之一。

我的猜测是,有两个原因导致了差异:

执行第一条INSERT语句时远程LDB文件的初始创建。这在第一个SQL命令中显示为开销,而实际上它是通过这两个命令持续存在的

缓存:文件可能足够小,Jet/ACE会在第一次操作期间将大块文件(包括标头和元数据)以及请求的数据页拉过连接,以便在发出第二个命令时,本地内存中不存在的数据会少得多


我的问题是为什么链接表的性能会出现问题。解决了这个问题,你就不必在临时表上乱搞了。参见。

结构相同,包括索引。两个表都没有定义主键。在插入之前,我尝试从临时表中删除所有索引。多次试验表明,第一次插入大约增加了10秒,第二次插入没有增加。所以我仍然认为第一个表是50秒,第二个表是7秒。两个表都没有主键?这就是问题所在-您需要一个主键,以避免将整个表拖过电线。事实上,真正的数据库从来没有没有没有PK的表,即使它们只是代理键,作为表中存储的数据的一部分实际上没有任何意义。您在网络上使用链接表时遇到了什么问题?如果它是带宽至少为10Mbps的有线网络,那么访问链接表就可以了。我希望知道为什么链接表的性能会出现问题。使用BE local,代码以秒为单位执行。在网络上,响应时间是可怕的,这让我想到了临时桌的想法。我会责怪网络,除了第二条select语句执行得太快。我已经通过了你的链接中提到的所有选项-没有用。我对缓存知之甚少..你能提供更多关于缓存的信息吗?谢谢您不应该担心缓存-使用Jet/ACE默认值。他们99.999%的时候都会没事的。数据必须通过导线传输。但是,如果你正在将成百上千条记录拉入临时表,你不能指望它会很快!我认为,如果一次只需要检索少于100条的少量记录,而不是直接绑定到临时表中,效率会更高。