从不同服务器中的链接表加入时,MS Access的性能如何?

时间:2009-06-26 03:57:49

标签: sql performance ms-access jet linked-tables

如果我有一个MS Access数据库,其中包含来自两个不同数据库服务器的链接表(比如一个来自SQL Server数据库的表和一个来自Oracle数据库的表),我编写了一个查询来连接这两个表,那么Access将如何(或者我想是Jet引擎?)处理这个查询?它会先在每个表上发出一些SELECT来获取我正在加入的字段,然后找出哪些行匹配,然后为这些行发出更多的SELECT?

4 个答案:

答案 0 :(得分:3)

是的,您可能会遇到一些严重的性能问题。多年来我做过这种事。 Oracle,Sql和DB2 - 呃。有时候我不得不在凌晨5点把它放在计时器上,所以当我7点钟进入时它已经完成了。

如果您的数据集非常重要,那么在本地构建表然后链接数据通常会更快。对于远程数据集,还要查看passthroughs。

例如,假设您从oracle db中提取了所有昨天的客户,并从sql db中购买了所有客户。假设您每天平均有100个客户,但是列出了30,000个,并且假设您的产品有500,000个列表。您可以查询oracle db以获取100个客户的列表,然后将其作为直接查询中的IN语句写入sql db。您几乎可以立即获得数据。

或者如果您的记录集很大,请构建两个ID的本地表,在本地比较它们,然后只需拉出必要的匹配项。

这很难看,但你可以节省数小时。

答案 1 :(得分:2)

那是我的猜测。如果连接的两端都有索引,但由于两个服务器都无法完全控制查询,因此无法进一步进行查询优化。

答案 2 :(得分:2)

要理解的关键是:

您是否在向两个服务器数据库发送请求之前询问Access / Jet可以优化的问题?如果您要加入两个表的全部,Jet将不得不请求两个表,这将是丑陋的。

另一方面,如果您可以提供限制联接的一方或双方的条件,则Access / Jet可以更高效并请求筛选的结果集而不是整个表。

答案 3 :(得分:1)

我没有从两个不同数据系统加入表的实际经验。但是,根据需求等等,您可能会发现运行SELECT查询的速度更快,只需要访问表中所需的记录和字段,并在Access中执行最终的连接和查询。