我在一个MySQL服务器上有一个68m行x 77列的表(general_table
),其中包含user_id
,user_name
,date
和{{ 1}}。
在极少数情况下(其中有83k个),有media_channel
但没有user_id
,我们会发现user_name
的值为“ user_name
” 。我可以从-
表中获取此信息。
要更新users_table
上的值,我使用以下更新函数,但是鉴于表的大小,这确实需要很长时间,因此我正在寻找替代方法。
general_table
也欢迎使用Pandas,PyMySQL或SQLAlchemy的答案
请记住那些要求仅对UPDATE
general_table as a,
users_table as b
SET a.user_name = b.user_name
where a.date > '2020-01-01'
and a.user_id = b.user_id
and a.media_channel = b.media_channel
and a.user_name = '-';
查询而不对更新有效的Explain函数的人。
答案 0 :(得分:2)
对于此查询:
UPDATE general_table g
JOIN users_table u ON g.user_id = u.user_id AND g.media_channel = u.media_channel
SET g.user_name = u.user_name
WHERE g.date > '2020-01-01' AND g.user_name = '-'
您要在general_table(user_name, date, user_id, media_channel)
和users_table(user_id, media_channel, user_name)
上建立索引。
注意:更新83k行仍然需要一些时间,因此您可能需要分批进行。