Access 2007 First cn.Execute语句非常慢

Access 2007 First cn.Execute语句非常慢

问题描述:

我目前正在使用拆分FE和BE在Access 2007中开发应用程序。 FE位于网络共享的本地。为了消除在网络上使用链接表时发现的一些问题,我尝试通过使用ADO的VBA,在应用程序首次使用cn.Execute“INSERT INTO TempTable1 SELECT * FROM LinkedTable1“和cn.Execute”INSERT INTO TempTable2 SELECT * FROM LinkedTable2“。Access 2007 First cn.Execute语句非常慢

LinkedTable1有45,552条记录,LinkedTable2有45,697条记录。

第一个execute语句需要50-85秒的地方。然而,第二个执行语句不超过9秒。这些时间是一致的。为了试图看看其中一个表是否存在问题,我已经改变了代码中的语句顺序,并且时间仍然相同(第一个执行时间太长,第二个执行时间非常长快速)。 (作为一个方面说明,我也使用CurrentDB.Execute命令尝试了DAO,结果没有任何不同)。如果第一条语句处理的记录多于第二条,那么对我来说这是有意义的,但尽管数量很少,但第二个表有比第一个更多的记录!

有没有人有任何建议,为什么发生这种情况和/或如何得到这第一次执行语句加快?

在此先感谢! ww

+0

您在网络上的链接表遇到了什么问题?如果它的网络带宽至少为10Mbps,那么Access链接表访问应该会很好。 –

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

+0

结构相同,包括索引。这两个表都没有定义主键。我尝试在插入之前从临时表中删除所有索引。多次试验表明,第一次插入增加了10秒,第二次插入没有增加。所以我仍然看着第一个50s和第二个7s。 – wsw

+0

这两个表都没有主键?这就是问题所在 - 你需要一个主键来避免把整个桌子拉过来。真正的数据库从来没有没有PK的表,实际上,即使它们只是替代键,这些键在表中存储的数据的一部分没有任何意义。 –

我的猜测是,有两个来源为差异:

  1. 初始创建时执行的第一个INSERT语句远程LDB文件。这在第一个SQL命令中显示为开销,当它实际上通过两者持续存在时。缓存:该文件可能足够小,以至于Jet/ACE在第一次操作期间通过网线(标题和元数据以及所请求的数据页)拉动大块文件,这样数据就会少得多当发出第二个命令时,不在本地存储器中。

我的问题是为什么你首先遇到链接表性能问题。解决这个问题,然后你就不必使用临时表。见Tony Toews's Performance FAQ

+0

我希望我知道我为什么遇到链接表性能问题。使用BE本地代码将在几秒钟内执行。 BE在网络上的响应时间是horrendus,这促使我转到临时表的想法。我会责怪网络,除了第二个选择语句执行得这么快。我已经完成了链接中提到的所有选项 - 无济于事。我对缓存了解不多......有没有更多的信息可以提供?谢谢! – wsw

+0

您不应该担心缓存 - 使用Jet/ACE默认值。他们将在99.999%的时间内完好无损。数据必须通过电线。但是如果你将数以千计的记录带入临时表中,你不能指望它速度很快!我认为根据需要简单检索少量记录会更有效率(每次少于100个),而不是直接绑定到临时表中。 –