@sllugovskih

Как правильно оптимизировать Mysql запрос?

Есть две таблицы в mysql, в первой таблице "sp_germany" порядка миллиона позиций, во второй 400 тысяч "sp_germany_small"

Нужно чтобы в первой таблице обновились цены указанные во второй таблице, сравнение какие цены обновлять идет по полю product_artikul

Код запроса:
UPDATE sp_germany as a, sp_germany_small as b
SET a.product_price = b.product_price
WHERE b.product_artikul = a.product_artikul


Проблема: во первых запрос более 10 минут крутится и не дает результата, mysql повисает от такого запроса похоже.
  • Вопрос задан
  • 336 просмотров
Решения вопроса 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Медлено у Вас все потому что вы перечисляете 2 таблицы подряд, получая полное произведение матриц в размере 1kk * 400k = 400kkk записей.
Все равно что "from a, b" написать.

Правильный запрос
UPDATE TABLE sp_germany AS a 
JOIN TABLE sp_germany_small  AS b ON b.product_artikul = a.product_artikul
SET a.product_price = b.product_price

Ну и индексы по полю product_artikul должны быть в обеих таблицах.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
попробуйте завернуть это все в транзакцию - по крайней мере коммит будет 1, а не 400К.

START TRANSACTION;
SET AUTOCOMMIT=0;
UPDATE sp_germany as a, sp_germany_small as b
SET a.product_price = b.product_price
WHERE b.product_artikul = a.product_artikul;
COMMIT;
SET AUTOCOMMIT=1;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы