【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(重要)

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


索引条件下推(以后补)

相关推荐
蓝速科技30 分钟前
会议室门牌触控预约选型与落地实战指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
YIAN38 分钟前
手撸社区后端:一套可落地的用户 - 文章 - 互动体系 MySQL 表设计与优化思路
后端·mysql
蓝速科技39 分钟前
企业展厅数字人导览效果提升与选型实战指南丨蓝速科技
大数据·运维·数据库·人工智能·科技·microsoft
奔跑吧树袋熊1 小时前
多租户隔离该做到哪一层:从连接池到 ORM 的取舍
开发语言·数据库·oracle·系统架构
码农学院1 小时前
零售电商GEO踩坑复盘:把 MySQL 商品库自动映射成 Product Schema 的完整方案
人工智能·mysql·零售·geo
罗光记1 小时前
全能 Go Agent 框架 Covonaut v1.1.2发布:终端对话加入旁问与三档输出
数据库·经验分享·其他·百度·新浪微博
Htr_1 小时前
Anysite.io 使用指南:把整个 Web 变成 AI 智能体的数据库
前端·数据库·人工智能
Lyra_Infra2 小时前
记一次麒麟 Linux 下达梦数据库 (DM8) 部署与 MySQL 命令行无界面迁移踩坑指南
数据库·后端·dba
晚安日记wanna2 小时前
只会答加索引MySQL 调优还能聊这 7 个点
数据库·面试
YHHLAI2 小时前
从零理解 Agent Memory 管理:内存记忆、文件持久化与上下文截断
数据库·oracle