Mysql Table Update Query 很慢,而且每天都在增加
Mysql Table Update Query is very slow and its increasing day by day
我们有一个 table,仅更新查询就需要将近 200-300 秒,总数据大小将近 3,357,196 行。我们附有密钥,select 查询非常快。只有更新查询花费了大量时间。
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
table 由每 2 分钟运行一次的 cron 作业不断更新。每分钟都有大量数据传到 table。
Check the MySQL profiling here
Table Details
Check the process which are running in that table
strava_workout
是一个字符串。但是您将其作为数字进行比较,因此未使用索引。
保持类型一致!
UPDATE t_strava_push
SET processed = 3
WHERE strava_workout = '2677850786';
我们有一个 table,仅更新查询就需要将近 200-300 秒,总数据大小将近 3,357,196 行。我们附有密钥,select 查询非常快。只有更新查询花费了大量时间。
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
table 由每 2 分钟运行一次的 cron 作业不断更新。每分钟都有大量数据传到 table。
Check the MySQL profiling here
Table Details
Check the process which are running in that table
strava_workout
是一个字符串。但是您将其作为数字进行比较,因此未使用索引。
保持类型一致!
UPDATE t_strava_push
SET processed = 3
WHERE strava_workout = '2677850786';