@skijaev

Как составить правильный Mysql запрос для обновления статистики всех статей с помощью group by?

Есть таблица nodes:
id, title, shows, clicks
- где shows и clicks - это общее число показов статьи во всех листингах

Есть таблица list_stats
id, title, node_id, shows, clicks
которая хранит статистику показов и кликов по статьям которые размещены в куче листингов

Вообщем моя задача заполнить поля shows, clicks для таблицы nodes суммируя соответствующие поля из таблицы list_stats, группируя по node_id.

Самое просто что пришло на ум это
update nodes
set nodes.shows = (select sum(shows) FROM list_stats where list_stats.node_id =node.id)

но этот запрос очень долгий на 10000 статей исполнялся 10 минут.

чую , что есть более красивый и быстрый запрос с использованием group by, но не хватает знаний...
цель получить запрос который будет исполнятся в пределах 1-2 секунд)
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
sofcase
@sofcase
Веб-разработчик
но этот запрос очень долгий на 10000 статей исполнялся 10 минут.

Подозрительно долго для такого кол-ва записей.
Сколько записей в самой таблице list_stats?
На list_stats.node_id стоит индекс?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
update nodes left join
(select node_id, sum(list_stats.shows) as totalshows group by node_id) as stats ON stats.node_id = nodes.id
 set nodes.shows = ifnull(totalshows, 0)

?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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