簡體   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