假设我有一个查询,比如
select * from remote_table
join local_table using(common_key)
其中remote_table是具有postgres_fdw
的FOREIGN TABLE
,local_table
是常规表。
local_table
很小(100 行(,remote_table
很大(数百万行(。
看起来远程表被整体拉取并在本地加入,此时将较小的表传送到远程服务器并远程加入会更有效。
有没有办法让postgres_fdw这样做?
不能使用连接来执行此操作,因为不同服务器上的表之间的连接始终在本地执行。
您可以尝试的是:
SELECT *
FROM (SELECT *
FROM remote_table
WHERE common_key IN (SELECT common_key FROM local_table)
) a
JOIN local_table USING (common_key);
我没有测试它,所以我不确定它是否有效,但这个想法是为外表扫描使用一个条件,可以向下推送并尽可能减少获取的数据量。
您是否尝试过将本地数据部署到外部服务器上的临时表中,然后将其加入外部表?不确定您的流程,或者这对您来说是否有效。