繁体   English   中英

连接查询中的 MySQL 更新执行速度非常慢

[英]MySQL update in join query executes very slow

我有两个表,分别是xp_pn_resalexp_guru_properties 我想从xp_pn_resale更新postal_code列,但数据来自xp_guru_properties并且它在一个 json 对象中,所以我需要提取。 我试图编写一个查询,但它没有响应或没有任何输出。 有谁知道是什么问题? 谢谢

这是我的选择查询以供参考和测试

select r.block, r.street_name, 
r.postal_code, p.property_name,
r.property_name as resale_property_name,
JSON_UNQUOTE(JSON_EXTRACT(p.json, '$.postcode') )as postcode
from xp_pn_resale AS r 
JOIN xp_guru_properties AS p 
ON r.property_name = p.property_name where r.postal_code is null 
limit 10

结果在此处输入图片说明

我只希望postcode是查询中postal_code的值,我只是将限制设置为 10,因为当我不做限制时会花费太多时间

另外这里是我的更新声明

UPDATE xp_pn_resale AS r
JOIN xp_guru_properties AS p ON r.property_name = p.property_name
SET r.postal_code = JSON_UNQUOTE(JSON_EXTRACT(p.json, '$.postcode'))
where r.property_name = p.property_name

上面的查询没有做任何事情,它一直在执行。 我不知道我写的查询有什么问题

我在800K数据xp_pn_resale和30K xp_guru_properties

首先,您的查询不需要WHERE子句,因此:

UPDATE xp_pn_resale r JOIN
       xp_guru_properties p
       ON r.property_name = p.property_name
    SET r.postal_code = JSON_UNQUOTE(JSON_EXTRACT(p.json, '$.postcode'));

我可能会怀疑两件事之一。 第一个是xp_guru_properties(property_name)上的索引。 这对性能很重要。

第二个是单个属性的属性表中有多个匹配项。 那真的会减慢速度。

试试这个查询

UPDATE xp_pn_resale
INNER JOIN xp_guru_properties
ON xp_pn_resale.property_name = xp_guru_properties.property_name
SET xp_pn_resale.postal_code = JSON_UNQUOTE(JSON_EXTRACT(xp_guru_properties.json, '$.postcode'))
WHERE xp_pn_resale.postal_code is NULL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM