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

时间:2020-01-09 09:25:06

标签: mysql sql database

我有两个表,分别是xp_pn_resalexp_guru_properties。我想从postal_code更新列xp_pn_resale,但是数据来自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

结果 enter image description here

我只希望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

上面的查询不执行任何操作,而是继续执行。我不知道我写的查询出了什么问题

我在xp_pn_resale中获得了800k的数据,在xp_guru_properties中获得了30k的数据

2 个答案:

答案 0 :(得分:1)

首先,您的查询不需要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)上的索引。这对性能很重要。

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

答案 1 :(得分:-1)

尝试此查询

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