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

Sql MS Access数据导出性能非常糟糕,sql,performance,ms-access,Sql,Performance,Ms Access,我正在使用Access 2007。我有一个查询,它访问一个包含几十万条记录的表,我通过基于两个字段的内部连接将其连接到另一个表。连接字段在两个表中都被索引,排序列也被索引。当我直接运行查询时,结果集将在大约2秒或更短的时间内打开。当我尝试导出查询结果(通过右键单击、导出、文本)时,Access会花费(相当确切地说)几个小时来做我不知道的事情,然后才会打开导出向导。然后,当我对格式进行必要的更改时(使其以制表符分隔,而不是逗号/引号),在单击“开始导出”按钮之前,还需要几个小时才能进行更改,当然这

我正在使用Access 2007。我有一个查询,它访问一个包含几十万条记录的表,我通过基于两个字段的内部连接将其连接到另一个表。连接字段在两个表中都被索引,排序列也被索引。当我直接运行查询时,结果集将在大约2秒或更短的时间内打开。当我尝试导出查询结果(通过右键单击、导出、文本)时,Access会花费(相当确切地说)几个小时来做我不知道的事情,然后才会打开导出向导。然后,当我对格式进行必要的更改时(使其以制表符分隔,而不是逗号/引号),在单击“开始导出”按钮之前,还需要几个小时才能进行更改,当然这还需要几个小时。在它坐着思考的时间里,它确实将CPU的活动保持在50%左右

你知道发生了什么,或者我怎样才能把它带回到合理性能的领域吗?我确实重新启动并在没有其他程序打开的情况下运行了它,验证了我的所有索引,重新检查了查询,直接重新运行了它(这再次花费了~2秒),然后立即重新尝试导出它(在~30分钟后仍然没有显示向导屏幕)


我有时会发现附加到现有表或使用复杂查询中的make表会有所帮助。填充此表后,将其导出应该不会花费太多时间。(确保要填充的表上没有索引)

是否尝试使用VBA或宏导出查询?正如apenwarr提到的,当你打开查询时,它只返回前几页,并在后台完成剩余页面的填充,但当你导出时,它必须首先运行整个查询。

这里肯定有什么惊人的错误。我可以导出连接到products表的130000个发票明细项目之间的联合查询,整个导出最多需要2秒(可能更少)

在这里,你只需要一个小数据集,对于100000条记录和一个在不到2秒钟内完成的查询,最多只需要10秒钟。几十万张唱片不需要这么长时间


是否有网络参与?这是一个多用户应用程序吗?在运行此导出之前,您是否尝试过持久连接(您可以通过打开任何链接表,最小化它,然后尝试导出来伪造持久连接)。一个包含100000条记录的表是如此之小,实际上不应该花费超过10秒的时间。有一些相当大的细节被遗漏了,比如网络,或者其他一些东西。这是一个通过网络链接的拆分数据库吗?

您是否安装了所有修复程序?例如,修复了向RTF的缓慢导出。您可能想看看:如果您想知道实际发生了什么,请使用SHOWPLAN--“Jet SHOWPLAN”上的Google获取说明。这将显示Jet查询优化器的执行计划。在此过程中,有某种设置控制导出向导查看多少行以猜测列的数据类型。听起来好像是要查看所有行,而不是前几行。不过,我不知道在哪里可以找到它!这对我也很有效。还要注意的是,仅仅弹出查询窗口实际上并不能运行整个查询:您必须滚动到数据表的末尾才能生成所有行,这可能需要一段时间。谢谢,这至少将时间从5天左右缩短到了一夜之间。性能仍然不令人兴奋,但至少我不会看着截止日期飞驰而过。一个额外的速度是以独占模式打开数据库,而不是共享和无记录锁定,这可能会再节省一个小时或2个小时。我最终做的是,我将加入字段连接到一个单独的“大师加入“字段,并仅在该字段上加入。从2域连接到1域连接将运行时间从几天缩短到几分钟。我知道存在一些严重错误,这就是我发布的原因。:-)数据库存储在本地硬盘上。它没有多用户组件,我是唯一打开或访问过它的人。这些表存储在当前数据库中,而不是从另一个Access文件链接。关于我能想到的唯一一个因素是,我最近没有压缩数据库,它的总大小大约是1.3G。绝对紧凑的DB或者创建新的DB和导入表,我会考虑创建空白数据库,并导入刚才的两个表+查询,然后尝试从此新数据库导出。我也会考虑在导出期间点击“高级”选项卡,然后“保存”导出“规范”。然后,您可以执行docmd.TransferText查询,这将允许您指定保存的导出“规范”(因此,您只需设置导出一次,然后不必等待向导出现。例如:docmd.TransferText acImportDelim、“我的规范”、“我的查询”、“c:\output.txt”
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;