提高速度或找到更快的SQL更新替代方法

时间:2020-03-19 14:46:16

标签: python mysql sql pandas sqlalchemy

我在一个MySQL服务器上有一个68m行x 77列的表(general_table),其中包含user_iduser_namedate和{{ 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函数的人。

1 个答案:

答案 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行仍然需要一些时间,因此您可能需要分批进行。