Sql 从子查询更新表的速度非常慢
我很难解决SQL问题。我已经在互联网上搜索过了,但没有找到解决办法 我在下面提供了一些上下文。我只包括了我认为相关的内容 现有表格:Sql 从子查询更新表的速度非常慢,sql,postgresql,postgresql-performance,Sql,Postgresql,Postgresql Performance,我很难解决SQL问题。我已经在互联网上搜索过了,但没有找到解决办法 我在下面提供了一些上下文。我只包括了我认为相关的内容 现有表格: Group id - has index Admin id - has index Post id - has index group_id - has index admin_id - has index 我的问题: Group id - has index Admin id - has index Post id - has index group_
Group
id - has index
Admin
id - has index
Post
id - has index
group_id - has index
admin_id - has index
我的问题:
Group
id - has index
Admin
id - has index
Post
id - has index
group_id - has index
admin_id - has index
过去,软件中存在一个错误,在创建帖子时没有填充admin\u id
列。这没关系,因为到目前为止,假设每个组只有一个管理员
我们现在正在添加功能,使每个组有多个管理员,因此需要填充admin\u id
。软件中的错误已经修复,但我们必须返回并为每个帖子填充管理员id
我的解决方案/问题:
Group
id - has index
Admin
id - has index
Post
id - has index
group_id - has index
admin_id - has index
我做错了什么?下面是我的问题。实际上,跑步需要45分钟。我找不到解决这个问题的办法。如果需要的话,我可以花45分钟,但我真的很讨厌它,我为找到一种高效的SQL方法而疯狂
UPDATE posts
SET admin_id = X.admin_id
FROM (
SELECT
posts.group_id,
admins_groups.admin_id
FROM posts
JOIN groups ON posts.group_id = groups.id
JOIN admins_groups ON groups.id = admins_groups.group_id
) AS X
WHERE posts.group_id = X.group_id;
到目前为止我已经尝试过的。
除了搜索互联网和失败
我读到索引会使写入速度变慢,因此我删除了posts.admin_id上的索引,并看到了20%的性能提升,但现在这已经足够好了。据我所知,您不需要
组
表,也不应该在FROM
子句中重复更新的目标表:
UPDATE posts
SET admin_id = admins_groups.admin_id
FROM admin_groups
WHERE posts.group_id = admins_groups.group_id
但真正的问题是:如果您可以通过连接获得正确的
admin\u Id
,那么为什么还要更新posts
表呢?你需要的时候就加入吧。我觉得自己像个白痴。你的解决方案奏效了。我根本不需要组,也不需要子查询。如果你回答这个问题,我会选择你的答案。