从子查询更新 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
我很难解决 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