我们有一些相当复杂的查询依赖于通过dblink访问的远程数据库上的表。 主要数据来自远程数据库,本地表用于将中央系统的事务ID转换为本地系统,添加额外属性并对其进行过滤。
SELECT rmote.*,
locl.local_id
FROM some_local_table locl
JOIN (-- REMOTE: This entire block only uses tables from the remote db
WITH
part1 as (SELECT ...
FROM r.table1
JOIN r.table2 ON (...)),
part2 as ( etc. )
SELECT ...
)
rmote ON (rmote.central_id = locl.central_id)
WHERE locl.propx IN (...)
如果执行计划涉及单独访问远程表(上面的虚拟代码中的 r.table1 和 r.table2 ),则查询速度非常慢。 是否可以运行整个"远程"阻止远程服务器并将结果作为临时表发送回本地加入本地表?