Mysql 表更新查询很慢而且一天比一天增加

Adh*_*p R 1 mysql sql mysql-error-1064

我们有一个表,仅用于更新查询需要将近 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;

Run Code Online (Sandbox Code Playgroud)

我们尝试更新的查询:

UPDATE t_strava_push SET processed = 3 WHERE strava_workout = 2677850786

Run Code Online (Sandbox Code Playgroud)

该表由每 2 分钟运行一次的 cron 作业不断更新。每分钟都有大量数据出现在桌面上。

在此处检查 MySQL 分析

表详细信息

检查在该表中运行的进程

Gor*_*off 5

strava_workout是一个字符串。但是您将它作为一个数字进行比较,因此没有使用索引。

保持类型一致!

UPDATE t_strava_push
    SET processed = 3
    WHERE strava_workout = '2677850786';
Run Code Online (Sandbox Code Playgroud)

  • @Adhip R - 我同意戈登·利诺夫给出的答案,但我有兴趣知道你的结果是否证实了这一点。如果是,请将其标记为答案(Gordon Linoff),或者是否仍然存在问题。 (2认同)