【MySQL】性能分析工具EXPLAIN

1、基本语法

EXPLAIN的使用与DESCRIBE基本相同

sql 复制代码
EXPLAIN SELECT select_options
或者
DESCRIBE SELECT select_options

2、EXPLAIN各列作用

2.1、table:表名

查询的每一行记录都对应一个单表,其中也分为驱动表和被驱动表

例如:

其中,s1是驱动表,s2是被驱动表

sql 复制代码
EXPLAIN SELECT * FROM S1 INNER JOIN S2 
2.2、id:每个SELECT关键字对应唯一一个id
  • id如果相同,即是一组,且从上往下执行
  • id越大,优先级越高,越先执行
  • id的每个号码,表示一趟独立的查询,一个sql查询趟数越少越好
2.3、select_type:SELECT关键字对应的查询类型
关键字 类型
SIMPLE 其他
PRIMARY UNION或者子查询最左边的小查询
UNION UNION或者子查询除了最左边的小查询
UNION RESULT UNION查询去重工作产生的临时表
SUBQUERY 不相关子查询
DEPENDENT SUBQUERY 相关子查询
DEPENDENT UNION 相关子查询中带有UNION
DERIVED 派生表的查询
2.4、type(重要)

执行计划的一条记录表示MySQL对某个表的执行查询时的访问方法。type列明确了这个访问方法。

访问方法 解释
system 表中只有一条记录,且该表的存储引擎统计数据是精确的,如MyISAM、Memory
const 根据主键或者唯一二级索引列与常数进行等值匹配
eq_ref 被驱动表根据主键或者唯一二级索引列与常数进行等值匹配
ref 普通二级索引列与常数进行等值匹配
ref_or_null 普通二级索引列与常数进行等值匹配或为null时
unique_subquery 如果查询优化器将IN子查询转化为EXISTS子查询且使用到主键进行等值匹配
range 使用索引获取某些范围区间的记录
index 使用索引覆盖,但需要扫描全部的索引记录时
all 全表扫描

由快到慢依次为*system > *const > *eq_ref > *ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > *range > *index > *ALL

2.5、possible_keys和key

可能用到的索引和实际上使用的索引

2.6、key_len(重要)

该属性表示实际用到的索引长度,可以帮助来检查是否充分的用上了索引。

相关计算:

  • varchar(10)变长字段且允许NULL = 10 * (utf8=3,gbk=2,latin1=1)+1(NULL)+2(变长字段)
  • varchar(10)变长字段且不允许NULL = 10 * (utf8=3,gbk=2,latin1=1)+2(变长字段)
  • varchar(10)固定字段且允许NULL = 10 * (utf8=3,gbk=2,latin1=1)+1(NULL)
  • varchar(10)固定字段且不允许NULL = 10 * (utf8=3,gbk=2,latin1=1)
2.7、ref

等值查询时,与索引列进行等值匹配的对象信息。

2.8、rows

预估要读取的条目数,越小越好

2.9、filtered

某表经过搜索条件过滤后剩余的记录条数的百分比

2.10、extra(重要)

会根据产生的错误进行相关提示


索引条件下推(以后补)

相关推荐
小白男神1 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶1 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G1 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备1 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远1 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
kybs19911 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
2601_962218611 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
程序猿_极客1 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
张洛闻Eren1 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安1 天前
MySQL-触发器
数据库·mysql