我目前正在使用拆分FE和BE在Access 2007中开发应用程序。 FE是本地网站共享的BE。为了消除在网络上使用链接表时发现的一些问题,我试图通过使用ADO的VBA,在应用程序首次使用cn.Execute“INSERT INTO TempTable1 SELECT *”加载时,使用来自两个链接的数据加载两个临时表。 FROM LinkedTable1“和cn.Execute”INSERT INTO TempTable2 SELECT * FROM LinkedTable2“。
LinkedTable1中有45,552条记录,LinkedTable2中有45,697条记录。
第一个执行语句需要50-85秒。但是第二个执行语句不会超过9秒。这些时间是一致的。为了查看其中一个表而不是另一个表是否存在问题,我在代码中切换了语句的顺序,时间仍然相同(第一次执行太长,第二次执行非常快速)。 (作为旁注,我也尝试过使用CurrentDB.Execute命令的DAO,没有不同的结果。)如果第一个语句处理的记录多于第二个语句,这对我来说是有意义的,但是虽然数量很少,但第二个表有比第一个记录更多的记录!
有没有人对于为什么会这样做以及/或如何让第一个执行语句加速来提出任何建议?
提前致谢! WW
答案 0 :(得分:0)
您在两个临时表上定义了哪些索引,以及主键定义?在附加数据时更新索引可能是一个表较慢的一个原因。
答案 1 :(得分:0)
我的猜测是,差异有两个来源:
执行第一个INSERT语句时初始创建远程LDB文件。这显示为第一个SQL命令中的开销,当它实际上是通过两者持续的时候。
缓存:文件可能足够小,以至于Jet / ACE在第一次操作期间通过线路(标头和元数据以及请求的数据页面)拉出大块数据,因此数据少得多发出第二个命令时,它不在本地内存中。
我的问题是为什么你首先遇到链表性能问题。解决这个问题,然后您就不必使用临时表了解。请参阅Tony Toews's Performance FAQ。