mysql(二)Explain详解

2023-11-09


explain命令是查看MySQL查询优化器如何执行查询的主要方法,可以很好的分析SQL语句的执行情况。每当遇到执行慢(在业务角度)的SQL,都可以使用explain检查SQL的执行情况,并根据explain的结果相应的去调优SQL等。

Explain用法

EXPLAIN tbl_name

或:

EXPLAIN [EXTENDED] SELECT select_options

  • EXPLAIN tbl_nameDESCRIBE tbl_nameSHOW COLUMNS FROM tbl_name的一个同义词。

  • 如果在SELECT语句前放上关键词EXPLAIN,MySQL将解释它如何处理SELECT,提供有关表如何联接和联接的次序。

该节解释EXPLAIN的第2个用法。

Explain的列详解

在这里插入图片描述

字段 含义
id 该语句的唯一标识
select_type 查询类型
table 表名
partitions 匹配的分区
type 联接类型
possible_keys 可能的索引选择
key 实际选择的索引
key_len 索引的长度
ref 索引的哪一列被引用了
rows 估计要扫描的行
filtered 表示符合查询条件的数据百分比
Extra 附加信息

id

id列的编号是select的序列号,有几个select就有几个id,并且id是按照select出现的顺序增长的,id列的值越大优先级越高,id相同则是按照执行计划列从上往下执行,id为空则是最后执行

select_type

查询类型 作用
SIMPLE 简单查询(未使用UNION或子查询)
PRIMARY 最外层的查询
UNION 在UNION中的第二个和随后的SELECT被标记为UNION。如果UNION被FROM子句中的子查询包含,那么它的第一个SELECT会被标记为DERIVED。
DEPENDENT UNION UNION中的第二个或后面的查询,依赖了外面的查询
UNION RESULT UNION的结果
SUBQUERY 子查询中的第一个 SELECT
DEPENDENT SUBQUERY 子查询中的第一个 SELECT,依赖了外面的查询
DERIVED 用来表示包含在FROM子句的子查询中的SELECT,MySQL会递归执行并将结果放到一个临时表中。MySQL内部将其称为是Derived table(派生表),因为该临时表是从子查询派生出来的
DEPENDENT DERIVED 派生表,依赖了其他的表
MATERIALIZED 物化子查询
UNCACHEABLE SUBQUERY 子查询,结果无法缓存,必须针对外部查询的每一行重新评估
UNCACHEABLE UNION UNION属于UNCACHEABLE SUBQUERY的第二个或后面的查询

table

表示当前这一行正在访问哪张表,如果SQL定义了别名,则展示表的别名

partitions

当前查询匹配记录的分区。对于未分区的表,返回null

type

连接类型,有如下几种取值,性能从好到坏排序

连接类型 功能
system 该表只有一行(相当于系统表),system是const类型的特例
const 针对主键或唯一索引的等值查询扫描, 最多只返回一行数据. const 查询速度非常快, 因为它仅仅读取一次即可
eq_ref 当使用了索引的全部组成部分,并且索引是PRIMARY KEY或UNIQUE NOT NULL 才会使用该类型,性能仅次于system及const。
ref 当满足索引的最左前缀规则,或者索引不是主键也不是唯一索引时才会发生。如果使用的索引只会匹配到少量的行,性能也是不错的。
fulltext 全文索引
ref_or_null 该类型类似于ref,但是MySQL会额外搜索哪些行包含了NULL。这种类型常见于解析子查询
index_merge 此类型表示使用了索引合并优化,表示一个查询里面用到了多个索引
unique_subquery 该类型和eq_ref类似,但是使用了IN查询,且子查询是主键或者唯一索引。
index_subquery 和unique_subquery类似,只是子查询使用的是非唯一索引
range 范围扫描,表示检索了指定范围的行,主要用于有限制的索引扫描。比较常见的范围扫描是带有BETWEEN子句或WHERE子句里有>、>=、<、<=、IS NULL、<=>、BETWEEN、LIKE、IN()等操作符。
index 全索引扫描,和ALL类似,只不过index是全盘扫描了索引的数据。当查询仅使用索引中的一部分列时,可使用此类型。有两种场景会触发:(1)如果索引是查询的覆盖索引,并且索引查询的数据就可以满足查询中所需的所有数据,则只扫描索引树。此时,explain的Extra 列的结果是Using index。index通常比ALL快,因为索引的大小通常小于表数据。(2)按索引的顺序来查找数据行,执行了全表扫描。此时,explain的Extra列的结果不会出现Uses index。
ALL 全表扫描,性能最差。

possible_keys

展示当前查询可以使用哪些索引,这一列的数据是在优化过程的早期创建的,因此有些索引可能对于后续优化过程是没用的。

key

表示MySQL实际选择的索引

key_len

索引使用的字节数。由于存储格式,当字段允许为NULL时,key_len比不允许为空时大1字节。

ref

表示将哪个字段或常量和key列所使用的字段进行比较。

如果ref是一个函数,则使用的值是函数的结果。要想查看是哪个函数,可在EXPLAIN语句之后紧跟一个SHOW WARNING语句。

rows

MySQL估算会扫描的行数,数值越小越好。

filtered

表示符合查询条件的数据百分比,最大100。用rows × filtered可获得和下一张表连接的行数。例如rows = 1000,filtered = 50%,则和下一张表连接的行数是500。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql(二)Explain详解 的相关文章

随机推荐

  • unity通过键盘控制物体移动,大小的缩放

    拖动距离 private float distance 10 缩放量 float scale 0 2f 通过键盘 Q 或者 E 控制物体的缩放 通过键盘 w s a d 控制物体上下左右的移动 private void Update if
  • PWM实现线性调光

    1 PWM调光原理 PWM全称为脉宽调制技术 是通过高精度的计数器对方波的占空比进行编码 就是这个东西 其实很好理解 高电平的时候才会做功 低电平的时候肯定不亮啊 PWM就是调制高电平的占比 其实一般是低电平才有效 因为会外接一个12V的电
  • XFocus Windows Internet 服务器安全配置

    Windows 2003版本区别 1 Windows Server 2003 Standard Edition 标准版 针对中小型企业的核心产品 他也是支持双路处理器 4GB的内存 它除了具备 Windows Server 2003 Web
  • Revit SDK下载地址

    20190325更新 共享了如下sdk REVIT 2014 SDK exe REVIT2015SDK SubscriptionRelease msi REVIT 2016 SDK msi Revit 2017 1 SDK Update O
  • 树莓派OpenWrt SD扩展问题

    树莓派OpenWrt磁盘扩展 1 查看问题 前几天给树莓派4B刷了OpenWrt当做软路由来使用 发现树莓派的SD卡空间没有完全被使用 有一部分未分区 已用大概只有2GB df h查看 2 fdisk 命令查看磁盘 3 按p查看分区情况 发
  • ansible自动化运维工具上部署lnmp架构

    ansible自动化运维工具上部署lnmp架构 ansible安装 通过ansible连接到192 168 228 20配置nginx安装 本地也要安装nginx 步骤略 安装mysql 安装PHP ansible自动化运维工具上部署lnm
  • Spring默认使用的JSON工具--Jackson

    Spring默认使用的JSON工具 Jackson 一 Jackson介绍 我们常用的json转换工具包括fastJson Gson Jackson等 其中Gson是Google所维护 功能全 fastJson特点是快 但是爆出几次的重大b
  • 2021最新版IDEA右侧Maven模块以及View下的Maven Project不见了解决方法

    问题描述 重新启动了一下IDEA后发现许多jar包找不到 想使用Maven进行依赖刷新 却找不到项目右侧的Maven Project 网上搜索了很多解决方法 如清除IDEA缓存 重启电脑 删除隐藏文件等等 都没有效果 将正确的解决方法记录在
  • Redis集群模式使用Lua脚本的限制

    问题复现 ERR bad lua script for redis cluster all the keys that the script uses should be passed using the KEYS array and KE
  • chapter15:springboot与监控管理

    Spring Boot与监控管理视频 1 简介 通过引入spring boot starter actuator 可以使用SpringBoot为我们提供的准生产环境下的应用监控和管理功能 我们可以通过http jmx ssh协议来进行操作
  • js宏观任务、微观任务

    js运行机制分为同步异步 异步又分为宏观事件和微观事件 同步异步 js是一门单线程语言 因此js在同一个时间里只能做一件事 单线程意味着 如果在同个时间有多个任务的话 这些任务就需要排队 前一个执行完成才能执行下一个任务 同步任务 同步任务
  • Linux之内核级防火墙selinux模块

    一 什么是selinux SELinux Security Enhanced Linux 是美国国家安全局 NSA 对于强制访问控制的实现 是 Linux历史上最杰出的新安全子系统 NSA是在Linux社区的帮助下开发了一种访问控制体系 在
  • c语言小游戏——扫雷

    扫雷是一款经典的单人益智游戏 玩家需要在一个由许多方块组成的棋盘上找出所有的地雷 而不触发任何一颗地雷 int input 0 do menu printf 请选择 gt scanf d input 输入1进入游戏 输入0退出游戏 输入其他
  • 我们总结了每个技术开发团队都会遇到的 4 个难题

    我们整理了一篇 每个技术团队都会遇到的4个难题 帮助即将从校园进入公司实习的后端程序员 以实践的视角 看看一个后端技术团队会遇到的一些难题 虽然 技术上的难题远不止于此 但如果能从这篇文章中获得一些职业体感 也许对你的实习面试会有所帮助 从
  • Python图像处理-3.pil裁剪、旋转粘贴图片

    from PIL import Image import matplotlib pyplot as plt pil im1 Image open pic1 png plt figure girlfriend1 plt imshow pil
  • c++中创建与调用dll

    文章目录 1 dll的创建 2 dll的使用 3 仅使用dll 显式链接 4 一点小的建议 好处想必不用说了 所谓的黑盒复用 实现模块化的同时避免源代码暴露等 可以将某一通用功能做成模块 方便复用 同时软件更新时如果只更新了几个模块 可以更
  • zookeeper

    先说 Paxos 它是一个基于消息传递的一致性算法 Leslie Lamport 在 1990 年提出 近几年被广泛应用于分布式计算中 Google 的 Chubby Apache 的 Zookeeper 都是基于它的理论来实现的 pxos
  • Vuejs学习八:map()函数

    定义 map 函数定义在JS的array中 它返回一个新的数组 数组中的元素为原生数据用函数处理后的值 map 不会对空数组进行检测 map 不会改变原始数组 let temp that caseTagsList map item gt i
  • WebSocket菜鸟教程二

    websocket服务器 多窗口显示数据案例 注意事项 1 因为WebSocket存在一段时间后自动断开链接的问题 故采用每次读写操作都重新链接的方式 2 服务端总链接数量有限 因此每次重新链接前应先关闭之前的链接 而不能直接创建链接 3
  • mysql(二)Explain详解

    目录 Explain用法 Explain的列详解 id select type table partitions type possible keys key key len ref rows filtered explain命令是查看My