MySQL обновление в запросе на соединение выполняется очень медленно - PullRequest
0 голосов
/ 09 января 2020

Я получил две таблицы xp_pn_resale и xp_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

запрос выше ничего не делает, он продолжает выполняться. Я не знаю, что не так с запросом, который я написал

Я получил 800 000 данных в xp_pn_resale и 30 000 в xp_guru_properties

Ответы [ 2 ]

1 голос
/ 09 января 2020

Во-первых, ваш запрос не нуждается в предложении 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). Это важно для производительности.

Во-вторых, в таблице свойств есть несколько совпадений для одного свойства. Это действительно замедлит ход событий.

0 голосов
/ 09 января 2020

Попробуйте этот запрос

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...