首页 > 其他分享 >explain工具分析

explain工具分析

时间:2024-08-29 10:22:00浏览次数:14  
标签:分析 explain actor 查询 select 工具 id film

explain关键字 可以分析查询语句或结构的性能瓶颈

当我们想要查询一条sql的执行计划时 在该条sql语句前面加上explain关键字 即可

例如 表的结构如下:

DROP TABLE IF EXISTS `actor`;

CREATE TABLE `actor` (

  `id` int(11) NOT NULL,

  `name` varchar(45) DEFAULT NULL,

  `update_time` datetime DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `actor` (`id`, `name`, `update_time`) VALUES (1,'a','2017-12-22 15:27:18'), (2,'b','2017-12-22 15:27:18'), (3,'c','2017-12-22 15:27:18');

DROP TABLE IF EXISTS `film`;

CREATE TABLE `film` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(10) DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `idx_name` (`name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `film` (`id`, `name`) VALUES (3,'film0'),(1,'film1'),(2,'film2');

DROP TABLE IF EXISTS `film_actor`;

CREATE TABLE `film_actor` (

  `id` int(11) NOT NULL,

  `film_id` int(11) NOT NULL,

  `actor_id` int(11) NOT NULL,

  `remark` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `idx_film_actor_id` (`film_id`,`actor_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `film_actor` (`id`, `film_id`, `actor_id`) VALUES (1,1,1),(2,1,2),(3,2,1);

使用select * from actor 是查询actor表中的信息

若加上explain的话 就会查询出这个sql的执行计划

使用explain查询的结果包括

1、id

id列的编号是select序列号 有几个select就有几个id  并且id的顺序是按select出现的顺序增长 

id列越大执行优先级越高 id相同从上往下执行 id为null最后执行

2、select_type

表示对应行时简单还是复杂查询

1)simple 简单查询 查询不包含子查询和union

        explain select * from film where id = 2;

2)  primary 复杂查询中最外层的select

3)  subquery  包含在select中的子查询

4)  derived 包含在from子句中的子查询 mysql会将结果放在一个临时表中 

        #关闭mysql5.7新特性对衍生表的合并优化

         set session optimizer_switch='derived_merge=off';   

         explain select (select 1 from actor where id = 1) from (select * from film where id = 1) der;

        set session optimizer_switch='derived_merge=on'; #还原默认配置

5)  union 在union中的第二个和随后的select

        #无结果

        explain select 1 union all select 1;

3、table

表示explain正在访问哪个表

4、partitions

如果查询是基于分区表的话,partitions 字段会显示查询将访问的分区

5、type

这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行,查找数据行记录的大概范围

依次从最优到最差分别为:system > const > eq_ref > ref > range > index > ALL

一般来说,得保证查询达到range级别,最好达到ref

6、possible_keys

这一列显示查询可能使用哪些索引来查找

7、key

这一列显示mysql实际采用哪个索引来优化对该表的访问

8、key_len

这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列

9、ref

这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),字段名(例:film.id)

10、rows

这一列是mysql估计要读取并检测的行数,注意这个不是结果集里的行数

11、filtered

该列是一个百分比的值,rows * filtered/100 可以估算出将要和 explain 中前一个表进行连接的行数(前一个表指 explain 中的id值比当前表id值小的表)

12、Extra

这一列展示的是额外信息

              using index 使用覆盖索引

​              using where 使用where语句来处理结果 并且查询的列未被索引覆盖

​              using index condition 查询得列不完全被索引覆盖where条件中是一个前导列的范围

​              using temporary 需要创建一张临时表来处理查询

​              using filesort  将用外部排序而不是索引排序,数据较小时从内存排序,否则需要在                                        磁盘完成排序

​              select tables optimized away 使用某些聚合函数来访问存在索引的某个字段

 

标签:分析,explain,actor,查询,select,工具,id,film
From: https://blog.csdn.net/Tresson_A/article/details/141633609

相关文章

  • 生信学习好帮手——生信云服务器,分析更[省心]的云
    开篇生物信息学(Bioinformatics)相关领域的快速迭代带来了学习门槛的显著变化,呈现出一种k型分化。一方面,人工智能(AI)和云计算技术的融合降低了原本高门槛的生物信息学技术的入门难度。另一方面,随着越来越多的研究者涌入这一领域,发表文章的难度也随之增加,这要求研究者在专业......
  • 25版王道数据结构课后习题详细分析 第五章 树与二叉树 5.4 树、森林
    一、单项选择题————————————————————————————————————————解析:正确答案:D————————————————————————————————————————解析:森林与二叉树具有对应关系,因此,我们存储森林时应先将森林转换......
  • 正则表达式:Visual Basic中的强大文本处理工具
    正则表达式:VisualBasic中的强大文本处理工具在软件开发中,文本处理是一项常见且关键的任务。正则表达式作为一种强大的文本模式匹配工具,能够用于执行各种复杂的字符串搜索、替换、验证等操作。VisualBasic(VB),作为一门流行的编程语言,提供了对正则表达式的支持。本文将详细介......
  • java全工具下载
    java-全工具下载JDK下载地址:https://www.oracle.com/cn/java/technologies/downloads/archive/配置环境变量(当前电脑在任何位置都能使用jdk中bin目录的命令)我的电脑--》属性--》高级属性设置--》环境变量--》path添加jdk安装目录中的bin文件路径C:\ProgramFiles\Java\jdk......
  • USB 逻辑分析仪分析丢包怎么分析(lecroy USB 逻辑分析仪)
    使用LeCroyUSB逻辑分析仪分析USB数据传输中的丢包现象,通常涉及以下步骤:1.设置触发条件在LeCroyUSB逻辑分析仪中,设置适当的触发条件来捕获数据包丢失的场景。常见的触发条件可以包括:特定的PID(PacketIdentifier)值,如DATA0或DATA1。错误类型,如CRCError(循环冗余......
  • Android 常用的性能分析工具详解:GPU呈现模式
    此篇将重点介绍几种常用的Android性能分析工具:一、Logcat日志选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗。当我们打开一个Activity的时候,log会打印一串log如下:I/ActivityManager﹕Displayedxxx.xxx.xxx/TestActivity:+1s272ms(total+3s843ms)第一......
  • 网络安全ctf比赛/学习资源整理,解题工具、比赛时间、解题思路、实战靶场、学习路线,推荐
    前言对于想学习或者参加CTF比赛的朋友来说,CTF工具、练习靶场必不可少,今天给大家分享自己收藏的CTF资源,希望能对各位有所帮助。CTF在线工具首先给大家推荐我自己常用的3个CTF在线工具网站,内容齐全,收藏备用。1、CTF在线工具箱:http://ctf.ssleye.com/包含CTF比赛中常用的......
  • [深度学习] 时间序列分析工具TSLiB库使用指北
    TSLiB是一个为深度学习时间序列分析量身打造的开源仓库。它提供了多种深度时间序列模型的统一实现,方便研究人员评估现有模型或开发定制模型。TSLiB涵盖了长时预测(Long-termforecasting)、短时预测(Short-termforecasting)、缺失值填补(Missingvalueimputation)、异常检测(Anomalyde......
  • Java-CompletableFuture工具类(续)
    CompletableFuture提供了runAsync和supplyAsync方法来异步执行任务。这两个方法可以帮助你在Java中轻松地实现异步编程。下面是关于这两个方法的详细说明以及如何在CompletableFuture工具类中使用它们的示例。runAsyncrunAsync方法用于异步执行一个Runnable任务......
  • Java-List结合ComableFuture自定义线程池的工具类
    为了结合CompletableFuture处理列表中的数据,并利用自定义线程池来并行处理这些元素,我们可以创建一个工具类ListCompletableFutureUtil,它包含一个静态方法processListConcurrently,该方法接收一个列表、一个处理每个元素的函数以及一个自定义线程池,并利用CompletableFutur......