MS Access数据导出性能非常糟糕

时间:2010-09-14 20:54:35

标签: sql performance ms-access

我正在使用Access 2007.我有一个查询,它访问一个包含几十万个记录的表,我通过基于两个字段的内部联接加入另一个表。连接字段在两个表中都被索引,并且排序列也被索引。当我直接运行查询时,结果集会在大约2秒或更短的时间内打开。当我尝试导出查询结果(通过右键单击,导出,发送到文本)时,Access会在出现导出向导之前花费(完全按字面意思)做我不知道的事情。然后,当我对格式进行必要的更改(使其以制表符分隔而不是逗号/引号)时,在我点击“开始导出”按钮之前,还有几个小时的更改,当然需要再过几个小时了。在它坐下来思考的那几个小时里,它确实将CPU固定在大约50%的活动位置。

知道发生了什么,或者我如何将其带回到合理性能的领域?我没有启动其他程序,重新检查查询,重新检查查询(再次花了大约2秒),然后立即重新尝试导出它(仍然没有大约30分钟后才显示向导屏幕。

table 1: AP_Open
ID  (primary key)
Vend_No (indexed, dups)
Vouch_No
Vouch_date (indexed, dups)
a bunch of other stuff
CompanyCode (indexed, dups)

table 2: Vendors
Vend_No (indexed, dups)
Vend_Name 
a bunch of other stuff
CompanyCode (indexed, dups)

query:
select ap_open.vend_no, ap_open.vouch_no, ap_open.vouch_date, vendors.vend_name (etc--about 40 fields)
From AP_Open INNER JOIN Vendors ON (AP_Open.companyCode = Vendors.CompanyCode) AND (AP_Open.Vend_No = Vendors.Vend_No) 
ORDER BY AP_Open.Vouch_date;

3 个答案:

答案 0 :(得分:2)

我有时会发现附加到现有表或使用复杂查询中的make表有帮助。一旦你填充了这个表导出它,就不应该花费太多时间。 (确保您要填充的表上没有索引)

答案 1 :(得分:1)

这里有一些令人惊讶的错误。我可以在连接到产品表的130,000个发票明细项目之间导出已加入的查询,整个导出需要2秒钟(可能更少)。

你在这里获取了一个小数据集,并且在不到2秒的时间内获得了几十万条记录和一个rus的查询,那么这应该只需要10秒钟。几十万条记录不应该花这么长时间。

是否涉及网络?这是一个多用户应用程序吗?您是否在运行此导出之前尝试了持久连接(您可以通过打开任何链接表来伪造持久连接,并将其最小化,然后尝试导出)。一个包含100,000个记录的表格非常小​​而且很小,实际上不应该花费大约10秒钟。有一些相当大的细节被遗漏,比如网络或其他东西。这是一个通过网络链接的拆分数据库吗?

答案 2 :(得分:0)

您是否尝试过使用VBA或宏来导出查询?关于打开查询时提到的事情要记住,它只返回前几页并在后台工作以完成其余部分的填充,但是当你导出它时必须先运行整个查询。