从子查询更新 table 执行得非常慢

Update table from sub query is performing really slow

我很难解决 SQL 问题。我已经在互联网上搜索过了,但未能找到解决方案。

我在下面提供了一些背景信息。我只包含了我认为相关的内容。

现有表:

Group
id - has index

Admin
id - has index

Post
id - has index
group_id - has index
admin_id - has index

我的问题:

在创建 post 时,软件中曾经存在一个错误,即未填充 admin_id 列。这没关系,因为到目前为止,我们假设每个组只有一个管理员。

我们现在正在添加为每个组分配多个管理员的功能,因此需要填充 admin_id。软件中的错误已修复,但我们必须返回并为每个 post.

填充 admin_id

我的Solution/Question:

我做错了什么?以下是我的查询。 运行 确实需要 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% 的性能提升,但现在仍然足够好。

据我所知,您不需要 groups table 并且您不应在 FROM 中重复更新的目标 table子句:

UPDATE posts 
    SET admin_id = admins_groups.admin_id 
FROM admin_groups 
WHERE posts.group_id = admins_groups.group_id