У нас есть таблица, которая только для запроса на обновление занимает почти 200-300 секунд, общий размер данных - почти 3 357 196 строк. К нему прикреплены ключи, и запрос на выбор очень быстрый. Только запрос на обновление занимает много времени.
Mysql ДБ: InnoDB
CREATE TABLE `t_strava_push` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`strava_user` int(20) DEFAULT NULL,
`strava_workout` varchar(20) COLLATE utf8_bin DEFAULT NULL,
`type` varchar(45) COLLATE utf8_bin DEFAULT NULL,
`aspect` varchar(45) CHARACTER SET utf8 DEFAULT NULL,
`event_time` int(20) DEFAULT NULL,
`body` varchar(255) COLLATE utf8_bin DEFAULT NULL,
`processed` int(1) NOT NULL DEFAULT '0',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
KEY `strava_user` (`strava_user`),
KEY `strava_workout` (`strava_workout`)
) ENGINE=InnoDB AUTO_INCREMENT=3377747 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Запрос, который мы пытаемся обновить:
UPDATE t_strava_push SET processed = 3 WHERE strava_workout = 2677850786
Таблица постоянно обновляется заданием cron, которое работает каждые 2 минуты. И много данных приходит на стол каждую минуту.
Проверьте здесь MySQL профилирование
Таблица Подробнее
Проверьте процесс, который выполняется в этом таблица