如果我有一个 MS Access 数据库,其中包含来自两个不同数据库服务器的链接表(比如一个来自 SQL Server db 的表和一个来自 Oracle db 的表)并且我编写了一个查询来连接这两个表,Access(或 Jet 引擎,我猜?)处理这个查询?它会首先在每个表上发出一些 SELECT 以获取我正在加入的字段,找出哪些行匹配,然后为这些行发出更多 SELECT 吗?
4 回答
是的,您可能会遇到一些严重的性能问题。我多年来一直在做这种事情。Oracle、Sql 和 DB2 - 呃。有时我不得不在早上 5:00 设置一个计时器,所以当我在 7:00 进入时它就完成了。
如果您的数据集足够重要,通常在本地构建表然后链接数据会更快。对于远程数据集,还要查看直通。
例如,假设您从 oracle 数据库中提取所有昨天的客户,并从 sql 数据库中提取所有客户购买。假设您平均每天有 100 个客户,但列表有 30,000 个,假设您的产品有 500,000 个列表。您可以在 oracle 数据库中查询您的 100 个客户的列表,然后将其作为 inIN
语句写入到 sql 数据库的直通查询中。您几乎可以立即获得数据。
或者,如果您的记录集很大,请构建两个 ID 的本地表,在本地比较它们,然后只提取必要的匹配项。
这很丑陋,但你可以从字面上节省几个小时。
要理解的关键是:
您是否在问 Access/Jet 在将请求发送到两个服务器数据库之前可以优化的问题?如果您要加入两个表的全部,Jet 将不得不请求两个表,这将是丑陋的。
另一方面,如果您可以提供限制联接的一侧或两侧的条件,则 Access/Jet 可以更高效并请求过滤的结果集而不是完整的表。
那将是我的猜测。如果连接的两边都有索引,这会有所帮助,但是由于两台服务器都无法完全控制查询,因此无法进行进一步的查询优化。
我没有连接来自两个不同数据系统的表的实际经验。但是,根据要求等,您可能会发现仅使用 Access 表中所需的记录和字段运行 SELECT 查询并在 Access 中进行最终连接和查询会更快。