如何更新 postgres table 并从另一个 table 迁移数据以在大数据上获得更好的性能 - postgresql

How to update a postgres table and migrate data from another table with better performance on large data - postgresql

我的 potgres 数据库中每种类型都有以下两个 table。

用户

userid       | bigint (PK) NOT NULL
username     | character varying(255)
businessname | character varying(255)

收件箱

messageid    | bigint (PK) NOT NULL
username     | character varying(255)
businessname | character varying(255)

到目前为止,从 inboxuser table 的引用发生在没有外键约束的情况下使用 usernamebusinessname 字段。我的目的是向 inbox 引入一个新字段作为 userRefId 并在没有外键的情况下引用 user table 中的 userid 这样我就可以删除 usernamebusinessname 字段,这是从 inbox.

中查找 user 的糟糕方法

现在我已经准备好 postgres ALTERUPDATE 查询来执行此迁移,但问题是它在记录太多的实时数据库中花费了太多时间。所以现在我想创建一个存储过程来完成这个任务。

查询

ALTER TABLE inbox ADD userRefId bigint;

UPDATE inbox SET userRefId = (SELECT userid FROM user WHERE username=inbox.username AND 
businessname=inbox.businessname) WHERE (SELECT userid FROM user WHERE username=inbox.username AND
businessname=inbox.businessname) IS NOT NULL;

解决此问题的最佳方法是什么?通过索引或创建存储过程来改进现有查询。非常感谢提供示例,因为我是新手。

通常带有 FROM 子句的 UPDATE 比 co-related 子查询

更快
UPDATE inbox 
  SET userRefId = u.userid
from "user" u
WHERE u.username = inbox.username 
  AND u.businessname = inbox.businessname