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