【发布时间】:2021-12-04 22:37:00
【问题描述】:
我有一个查询,它使用 dblink 从一个数据库回填数据并将其插入到另一个数据库的 jsonb 列中。它只需要运行 1000 条左右的记录,但运行时间很长(30s 到 1 分钟之间)。
为什么?如何让这更快?
这是查询:
CREATE EXTENSION dblink;
update "table" t1 set jsonb_example_column = jsonb_set(jsonb_example_column, '{user}', jsonb_build_object('name',jsonb_example_column->'user'->'name','phone',jsonb_example_column->'user'->'phone','address',jsonb_example_column->'user'->'address','user_id', other_db.user_id))
FROM dblink('dbname=$DB_NAME
port=$DB_PORT
host=$DB_HOST
user=$DB_USER
password=$DB_PASSWORD',
'SELECT user_id, external_id from other_db_table t2')
AS other_db("user_id" uuid, external_id uuid) WHERE other_db.external_id = t1.external_id;"
【问题讨论】:
-
这是一个远程表,因此请检查:a) 与远程服务器的网络连接,b) 请求的数据量。如果您通过慢速连接请求大量数据 - 那么这里没有什么意外
-
如果使用外部表更快,您是否尝试过?
-
"它只需要在 1000 上运行"。那是“other_db_table”的大小吗?如果不是,这个数字是从哪里来的?
-
我没有尝试过外部表,但会这样做。是的,~1000 是“other_db_table”的大小。
-
所以外部表要快得多。谢谢,a_horse_with_no_name!
标签: sql postgresql query-optimization