1
我正在解决SQL问题时遇到困难。我已经在互联网上搜索过,没有找到解决方案。子查询的更新表执行起来非常慢
我在下面提供了一些上下文。我只包括我认为相关的内容。
现有的表:
Group
id - has index
Admin
id - has index
Post
id - has index
group_id - has index
admin_id - has index
我的问题:
曾经有在软件中创建一个帖子的时候,这不是填充admin_id
列的错误。这是可以的,因为直到现在,假定每个组只有一个管理员。
我们现在增加了对每个组都有多个管理员的功能,因此需要填充admin_id
。软件中的错误已得到解决,但我们必须回过头来为每个帖子填写admin_id
。
我的解决/问题:
我在做什么错?以下是我的查询。这实际上需要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%,但仍然是现在好了足够。
但真正的问题是:如果你能通过连接获得正确的'admin_Id',那么为什么要更新'posts'表呢?只要你需要它,就加入它。 –
哇。我觉得自己像个白痴。您的解决方案奏效我根本不需要组,我根本不需要子查询。如果你回答这个问题,我会选择你的答案。 – tambykojak