我需要合并视图中不同数据库上两个表的结果。 据我搜索,我们可以为此使用dblink扩展。
我决定使用dblink扩展通过全部合并来合并这些表,但是它变得太慢了。
例如:
CREATE DATABASE Test1;
此后,我在pgadmin中运行以下查询并分析了同一数据库中的并集
CREATE TABLE A_Test1(id int NOT NULL);
INSERT INTO A_Test1
SELECT x
FROM generate_series(1, 1000000) AS x;
CREATE TABLE B_Test1(id int NOT NULL);
INSERT INTO B_Test1
SELECT x
FROM generate_series(1, 1000000) AS x;
SELECT id FROM A_Test1
UNION ALL
SELECT id FROM B_Test1
-- a_test1 TotalCost 14425 , Actual Total Time 202.336
-- b_test1 TotalCost 14425 , Actual Total Time 216.108
-- Append TotalCost 38850 , Actual Total Time 607.316
CREATE DATABASE Test2;
CREATE EXTENSION dblink;--Run on Test1 Database
CREATE TABLE B_Test2(id int NOT NULL);--Run on Test2 Database
INSERT INTO B_Test2 --Run on Test2 Database
SELECT x
FROM generate_series(1, 1000000) AS x;
使用dblink扩展,结果如下所示
SELECT id FROM A_Test1
UNION ALL
SELECT id FROM dblink('dbname=test2','select id from b_test2') AS f(id integer);
-- a_test1 TotalCost 14425 , Actual Total Time 197.493
-- Function Scan TotalCost 10 , Actual Total Time 3188.188
-- Append TotalCost 19440 , Actual Total Time 3537.514
使用dblink的总时间要比不使用dblink的总时间长。
在解释总时间时,dblink太慢了。但是当我们解释总成本时,第一个低于dblink吗?