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

如何更新postgres表并从另一个表迁移数据,从而在大数据上获得更好的性能-postgresql,postgresql,stored-procedures,database-performance,data-migration,Postgresql,Stored Procedures,Database Performance,Data Migration,在我的potgres数据库中,每种类型有以下两个表 使用者 收件箱 到目前为止,从收件箱引用用户表时使用的是用户名和业务名称字段,没有外键约束。我的意图是在inbox中引入一个新字段作为userRefId,并在user表中引用userid,而不使用外键,这样我就可以删除username和businessname字段,这是从inbox中查找user的一种糟糕方式 目前,我已经准备了postgresALTER和UPDATE查询来执行此迁移,但问题是它在实时数据库中花费了太多时间,记录太多。现在我想创

在我的potgres数据库中,每种类型有以下两个表

使用者

收件箱

到目前为止,从
收件箱
引用
用户
表时使用的是
用户名
业务名称
字段,没有外键约束。我的意图是在
inbox
中引入一个新字段作为
userRefId
,并在
user
表中引用
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 inbox 
  SET userRefId = u.userid
from "user" u
WHERE u.username = inbox.username 
  AND u.businessname = inbox.businessname

通常,使用FROM子句的更新比共相关子查询快

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

作为旁注:使用“魔术”数字,如255作为
varchar
列的最大长度,与342或271等相比,没有性能或存储优势。作为旁注:使用“魔术”与342或271等相比,
varchar
列的最大长度为255这样的数字在性能或存储方面没有优势。对存储过程选项有任何建议吗?@dineshalwis:如果将其放入存储过程,更新不会更快。对存储过程选项有任何建议吗?@dineshalwis:如果将其放入存储过程中。
UPDATE inbox 
  SET userRefId = u.userid
from "user" u
WHERE u.username = inbox.username 
  AND u.businessname = inbox.businessname