1

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

4

4 回答 4

3

是的,您可能会遇到一些严重的性能问题。我多年来一直在做这种事情。Oracle、Sql 和 DB2 - 呃。有时我不得不在早上 5:00 设置一个计时器,所以当我在 7:00 进入时它就完成了。

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

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

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

这很丑陋,但你可以从字面上节省几个小时。

于 2009-06-26T18:20:49.233 回答
3

要理解的关键是:

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

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

于 2009-06-26T20:24:50.477 回答
2

那将是我的猜测。如果连接的两边都有索引,这会有所帮助,但是由于两台服务器都无法完全控制查询,因此无法进行进一步的查询优化。

于 2009-06-26T04:07:11.843 回答
1

我没有连接来自两个不同数据系统的表的实际经验。但是,根据要求等,您可能会发现仅使用 Access 表中所需的记录和字段运行 SELECT 查询并在 Access 中进行最终连接和查询会更快。

于 2009-06-26T04:10:58.753 回答