MySQL 多表连接查询,慢查询 [ 2.0 版本 ]
三张表 连表查询,都有索引,使用 explain 执行计划查看,主表没有用到索引
feed主表 里面数据比较多,一百多万条,还在不断增加
explain 
SELECT
	`feed`.*
FROM
	`feed`
LEFT JOIN `group_feed` ON `group_feed`.`feed_id` = `feed`.`feed_id`
LEFT JOIN `group` ON `group`.`group_id` = `group_feed`.`group_id`
WHERE
	`auto_send` = 0
AND `feed`.`is_delete` = 0
GROUP BY
	`feed`.`feed_id`
ORDER BY
	`feed`.`gmt_create` DESC
LIMIT 50
下图执行计划分析

如下是后台分页访问情况,一页50条数据

其中 feed,group_feed,group 三张表索引情况
CREATE TABLE `feed` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `feed_id` varchar(20) NOT NULL DEFAULT '' COMMENT '动态 id',
  `uuid` varchar(32) NOT NULL DEFAULT '',
  `source` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '0.澜渟 1.澜渟医生',
  `type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '类型(0:文字、1:图片、2:视频)',
  `auto_send` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否自动发送 0 否 1 是',
  `text` varchar(1000) NOT NULL DEFAULT '',
  `pic` text NOT NULL,
  `video` text NOT NULL,
  `title` varchar(36) NOT NULL DEFAULT '',
  `cover` varchar(256) NOT NULL DEFAULT '',
  `introduction` varchar(1000) NOT NULL DEFAULT '',
  `collect_total` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '收藏数量',
  `comment_total` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '评论数量',
  `like_total` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '点赞数量',
  `weight` tinyint(4) unsigned NOT NULL COMMENT '推荐权重',
  `is_recommend` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否推荐',
  `recommend_app` tinyint(2) NOT NULL DEFAULT '-1' COMMENT '推荐平台 0. 澜渟 1.澜渟医生 2.全平台',
  `recommend_time` int(10) unsigned NOT NULL DEFAULT '0',
  `is_public` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否发布',
  `is_delete` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否删除',
  `pv` int(11) unsigned NOT NULL DEFAULT '0',
  `gmt_create` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `feed_id` (`feed_id`),
  KEY `uuid` (`uuid`),
  KEY `type` (`type`),
  KEY `gmt_create` (`gmt_create`)
) ENGINE=InnoDB AUTO_INCREMENT=20980 DEFAULT CHARSET=utf8mb4 COMMENT='动态表';
CREATE TABLE `group_feed` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `group_id` varchar(20) NOT NULL DEFAULT '' COMMENT '圈子 id',
  `feed_id` varchar(20) NOT NULL DEFAULT '' COMMENT '动态 id',
  `gmt_create` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `group_id` (`group_id`),
  KEY `feed_id` (`feed_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4404 DEFAULT CHARSET=utf8mb4 COMMENT='圈子动态关联表';
CREATE TABLE `group` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `group_id` varchar(20) NOT NULL DEFAULT '' COMMENT '圈子 id',
  `title` varchar(100) NOT NULL DEFAULT '' COMMENT '标题',
  `cover` varchar(256) NOT NULL DEFAULT '' COMMENT '封面',
  `abstract` varchar(150) NOT NULL DEFAULT '' COMMENT '简介',
  `is_public` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否开启审核 0. 否 1.是',
  `is_release` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '是否发布:0 - 未发布、1 - 已发布',
  `sort` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
  `follow_total` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '关注数',
  `feed_total` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '动态数',
  `app` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT 'APP(0:澜渟、1:澜渟医生、2:同时)',
  `gmt_create` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `group_id` (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8mb4 COMMENT='圈子表';
共 2 个回答
刘冲💯
            注册时间:2017-10-16
最后登录:2021-04-01
在线时长:2小时33分
    最后登录:2021-04-01
在线时长:2小时33分
- 粉丝1
 - 金钱2470
 - 威望0
 - 积分2490
 
 GROUP BY一般去重嘛,去重唯一索引就等于全表扫描了,因为是唯一的嘛。