mysql left join 耗时_为什么才两万数据量的表left join这么慢?

两个表left join 很慢

异步任务表(9条记录)

CREATE TABLE `com_async_task` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`task_name` varchar(64) NOT NULL DEFAULT '' COMMENT '任务名称',

`task_type` varchar(64) NOT NULL DEFAULT '' COMMENT '任务类型',

`remark` varchar(255) NOT NULL DEFAULT '' COMMENT '任务备注',

`unique_key` varchar(64) NOT NULL DEFAULT '' COMMENT '任务uniqueKey',

`level` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '优先级',

`create_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',

`operator_name` varchar(64) NOT NULL DEFAULT '' COMMENT '任务负责人',

`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '0正常1删除',

PRIMARY KEY (`id`),

KEY `unique_key` (`unique_key`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='异步任务表';

异步任务详细表(27000+记录)

CREATE TABLE `com_async_specific_tasks` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`task_id` int(11) NOT NULL DEFAULT '0' COMMENT '所属任务id(com_async_task)',

`params` text NOT NULL COMMENT '具体任务参数',

`status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态0待运行1运行中2成功3失败',

`error_code` varchar(32) NOT NULL DEFAULT '' COMMENT '错误code',

`error_msg` varchar(255) NOT NULL DEFAULT '' COMMENT '错误msg',

`is_retry` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否重试',

`retry_num` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '重试次数',

`from` varchar(64) NOT NULL DEFAULT '' COMMENT '任务来源',

`create_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',

`update_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',

`deleted` tinyint(1) NOT NULL DEFAULT '0',

`time_of_day` int(11) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`),

KEY `task_id` (`task_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='具体异步任务表';

执行查询sql

// 如果不分页,这个sql竟然要达到12秒之久。

SELECT `s`.*, `t`.`task_name`, `t`.`task_type`, `t`.`remark`, `t`.`unique_key`, `t`.`level`, `t`.`operator_name`

FROM `com_async_specific_tasks` `s`

LEFT JOIN `com_async_task` `t` ON s.task_id = t.id

WHERE t.deleted = 0 ORDER BY `s`.`id` ;

explain结果

7ee5e0e3ec3f43570492e4a221853829.png

分别在on上的字段有索引,而且数据量也不大,为什么会有这么长的查询时间,就算分页也需要0.6秒左右,太长时间了。

故在这咨询求教一下,有没什么优化方法。

你可能感兴趣的:(mysql,left,join,耗时)