两个表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结果
分别在on上的字段有索引,而且数据量也不大,为什么会有这么长的查询时间,就算分页也需要0.6秒左右,太长时间了。
故在这咨询求教一下,有没什么优化方法。