Mysql SQL优化实战 之 EXPLAIN篇

目录

EXPLAIN

一.单表优化

1.首先创建一个单表 

2.插入数据

3.根据条件写sql

4.使用EXPLAIN分析SQL

5.开始优化 

6.优化完成


EXPLAIN

ps:本篇博客记录sql优化实战 explain 相关理论知识在其他文章中总结,一些关键字或者知识点就不一一讲解了。

一.单表优化

1.首先创建一个单表 

CREATE TABLE `article` (
  `id` int(10) NOT NULL,
  `author_id` int(10) DEFAULT NULL COMMENT '作者ID',
  `category_id` int(10) DEFAULT NULL COMMENT '分组ID',
  `views` varchar(10) DEFAULT NULL COMMENT '浏览次数',
  `comments` varchar(10) DEFAULT NULL COMMENT '备注',
  `title` varchar(255) DEFAULT NULL COMMENT '标题',
  `content` varchar(1000) DEFAULT NULL COMMENT '正文',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.插入数据

INSERT INTO `explain`.`article` (`id`, `author_id`, `category_id`, `views`, `comments`, `title`, `content`) VALUES ('1', '1', '1', '1', '1', '1', '1');
INSERT INTO `explain`.`article` (`id`, `author_id`, `category_id`, `views`, `comments`, `title`, `content`) VALUES ('2', '2', '2', '2', '2', '2', '2');
INSERT INTO `explain`.`article` (`id`, `author_id`, `category_id`, `views`, `comments`, `title`, `content`) VALUES ('3', '3', '3', '3', '3', '3', '3');
INSERT INTO `explain`.`article` (`id`, `author_id`, `category_id`, `views`, `comments`, `title`, `content`) VALUES ('4', '4', '4', '4', '4', '4', '4');
INSERT INTO `explain`.`article` (`id`, `author_id`, `category_id`, `views`, `comments`, `title`, `content`) VALUES ('5', '5', '5', '5', '5', '5', '5');

3.根据条件写sql

查询 category_id 为2并且comments大于1的情况下,views最多的author_id

SELECT a.author_id FROM `article` a WHERE a.category_id=2 AND a.comments >1 ORDER BY a.views LIMIT 1;

4.使用EXPLAIN分析SQL

1.没有使用索引,全表查询 最坏结果 2.Usingfilesort  需要优化 具体原因可看之前博客

5.开始优化 

1.创建索引

上图用到了三个字段,创建一个组合索引包含这三个字段

2.查看索引结构

3.再次查看

分析:索引是使用到了,全表扫描处理好了,但是Using filesort 未解决,但是由于comments 是范围查询 导致索引失效,举例:三个字段为一二三楼,一楼正常使用,二楼无法使用,导致排序无法使用索引内部排序,使用了文件排序。

4.索引删除

由于创建的索引未能解决Extra中的Using filesort,该索引需要删除重新创建

查看索引结构

5.创建新索引

由于ccv索引无法解决 假设跳过中间范围查询 创建cv索引

6.优化完成

猜你喜欢

转载自blog.csdn.net/LiuY521/article/details/114138259