Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从子查询更新表的速度非常慢_Sql_Postgresql_Postgresql Performance - Fatal编程技术网

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_

我很难解决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_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
表呢?你需要的时候就加入吧。我觉得自己像个白痴。你的解决方案奏效了。我根本不需要组,也不需要子查询。如果你回答这个问题,我会选择你的答案。