Как ускорить UPDATE MySQL?

Приветствую!

Для того чтобы на блоге у каждой новости был счетчик количества просмотров, при открытии какой-либо статьи происходит следующий запрос:

UPDATE `table` SET `views` = `views` + 1 WHERE id = '123'


Т.е. поле счетчика просмотров у каждой новости, при ее открытии, инкрементируется на 1.

Но, как оказалось, такие запросы очень, очень сильно тормозят сервер (их очень много).
Как можно эту задачу лучше оптимизировать?

P.S. - InnoDB, висит индекс на id и views, из этой же таблицы постоянно производятся выборки SELECT'ом.
  • Вопрос задан
  • 1041 просмотр
Пригласить эксперта
Ответы на вопрос 3
dimonchik2013
@dimonchik2013
non progredi est regredi
можешь триггером на каждый селект

но т.к. по грамотному, каждый раз лезть за кешированной статьей не нужно - делай отдельный сервис учета: insert логов на каждый просмотр и постобработка данных ежедневно/часно/недельно/секундно
Ответ написан
@Fortop
Tech/Team lead
Задача оптимизируется тривиальным образом.

Realtime счетчики переносятся Redis (другое key-value хранилище), а апдейт в БД делать раз в сутки, например, по крону.

Естественно, что если нужны актуальные данные на текущий момент, то их необходимо брать из Redis
Ответ написан
@choupa
Архитектор (обычный, который строит)
Я вообще не спец, но если сделать таблицу в виде "стека" с автоинкрементом или даже без него

INSERT INTO stack VALUES ('article_id');

А потом считать число строк по каждой новости и периодически таблицу очищать.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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