我有来自SELECT
UPDATE
MySQL
声明
UPDATE table_Learning l
INNER JOIN (select ULN, id from table_users group by ULN having count(ULN) =1) u
ON l.ULN = u.ULN
set l.user_id=u.id
WHERE l.user_id is null
问题是,它太慢而且超时,基本上不起作用。
我确信这是与该行:
INNER JOIN (select ULN, id from table_users group by ULN having count(ULN) =1) u
,特别是因为在这个内部选择中有GROUP BY
和HAVING
子句,并且从我读过的内容中可以看出,因为INNER JOINS
对于MySQL非常慢。
我的总体目标是:
在userID
中填充null
的{{1}}个table_learning
要使用userID
中的table_users
来执行此操作
在两个表中加入名为ULN
的字段
要仅填充ULN
中table_users
唯一的字段,例如,如果有多个用户拥有此ULN
,请填写user_id
中的table_learning
答案 0 :(得分:2)
这是您的查询:
UPDATE table_Learning l INNER JOIN
(select ULN, id
from table_users
group by ULN
having count(ULN) = 1
) u
ON l.ULN = u.ULN
set l.user_id=u.id
WHERE l.user_id is null;
在MySQL中,子查询会很昂贵。 table_learning(user_id)
上的索引可能会有所帮助。但是在子查询中过滤也可能有所帮助:
UPDATE table_Learning l INNER JOIN
(select ULN, id
from table_users
where exists (select 1
from table_learning tl
where tl.ULN = u.uln and tl.user_id is null
)
group by ULN
having count(ULN) = 1
) u
ON l.ULN = u.ULN
set l.user_id=u.id
WHERE l.user_id is null;
为此,您需要table_learning(ULN, user_id)
上的综合索引。