@phpcoder81

Почему простой запрос очень долгий?

Подскажите, почему очень долго выполняется запрос при 10.000 товаров и 400.000 строк статистики? Нужно очистить таблицу статистики, сохранив в таблицу товары количество просмотров.

Таблица 1 товары id, name, price,...., statistic (всего просмотров)
Таблица 2 статистика по просмотрам id, pid (внешний ключ к товарам) , date

UPDATE `products` 
SET `products`.`statistic` = (SELECT COUNT(`statistic`.`id`) FROM `statistic` WHERE `statistic`.`pid` = `products`.`id`)
  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
@RoverWhite
Очевидно потому что при таком синтаксисе запроса, вот эта часть
SELECT COUNT(`statistic`.`id`) FROM `statistic` WHERE `statistic`.`pid` = `products`.`id`
будет выполняться 10000 раз
Вот так должно быть быстрее
UPDATE `products` p
INNER JOIN (SELECT COUNT(*) as cnt, `statistic`.`pid` FROM `statistic` GROUP BY `statistic`.`pid`) as sta ON p.`id` = sta.`pid`
SET p.`statistic` = sta.`cnt`
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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