Как сократить или оптимизировать количество запросов UPDATE к mysql?

Есть необходимость сделать автоматическое обновление цен для магазина, написал , вроде все работает , только обновление выполняется около 20 минут , что не есть хорошо. Выяснил что большое количество UPDATE около 8 тыс, как их можно сократить или оптимизировать , сам запрос такого типа "
UPDATE product SET stock_status_id='7',status='1',quantity='1', price='".$article['PriceUSD'][$el_mass]."' WHERE sku='".$art['sku']."'"
то есть изменятся только price(цена) для каждого запроса.
  • Вопрос задан
  • 393 просмотра
Решения вопроса 1
@Camaro67
Помог? - "Отметить решением"
Как вариант
INSERT INTO `product` (`sku`, `stock_status_id`, `status`, `quantity`, `price`)
VALUES (...), (...), (...)
ON DUPLICATE KEY UPDATE `stock_status_id` = VALUES(`stock_status_id`), `status` = ...

В данном случае sku должен быть ключом. Если вместо sku есть какой-то другой ключ, используйте его.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
kotomyava
@kotomyava
Системный администратор
Чисто на всякий случай: А по полю sku у вас есть индекс? А то 8000 запросов это плохо, но 20 минут на на 8000 простых апдейтов, это подозрительно много!
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для начала замените на подготовленный запрос, тогда он не будет каждый раз компилироваться на сервере.
Ответ написан
Комментировать
@Vlad852 Автор вопроса
INSERT INTO `product` (`sku`, `stock_status_id`, `status`, `quantity`, `price`)
VALUES (`sku0`, `stock_status_id0`, `status0`, `quantity0`, `price0`),(`sku1`, `stock_status_id1`, `status1`, `quantity1`, `price1`)
ON DUPLICATE KEY UPDATE `stock_status_id` = VALUES(`stock_status_id`), `status` = VALUES(`status`), `quantity` = VALUES(`quantity`),`price` = VALUES(`price`) , правильно записал если на два sku?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы