如何更新 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)
到目前为止,从 inbox
到 user
table 的引用发生在没有外键约束的情况下使用 username
和 businessname
字段。我的目的是向 inbox
引入一个新字段作为 userRefId
并在没有外键的情况下引用 user
table 中的 userid
这样我就可以删除 username
和 businessname
字段,这是从 inbox
.
中查找 user
的糟糕方法
现在我已经准备好 postgres ALTER
和 UPDATE
查询来执行此迁移,但问题是它在记录太多的实时数据库中花费了太多时间。所以现在我想创建一个存储过程来完成这个任务。
查询
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
我的 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)
到目前为止,从 inbox
到 user
table 的引用发生在没有外键约束的情况下使用 username
和 businessname
字段。我的目的是向 inbox
引入一个新字段作为 userRefId
并在没有外键的情况下引用 user
table 中的 userid
这样我就可以删除 username
和 businessname
字段,这是从 inbox
.
user
的糟糕方法
现在我已经准备好 postgres ALTER
和 UPDATE
查询来执行此迁移,但问题是它在记录太多的实时数据库中花费了太多时间。所以现在我想创建一个存储过程来完成这个任务。
查询
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