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

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


索引条件下推(以后补)

相关推荐
ShiXZ2131 小时前
Redis 常用指令全集:redis-cli 实战速查手册
数据库·redis·缓存
晓子文集1 小时前
Tushare接口文档:期货日线行情(fut_daily)
大数据·数据库·金融数据·量化投资·tushare
WA内核拾荒者2 小时前
WhatsApp 账号异常检测的自动化告警系统设计
数据库·python·自动化
龙仔7255 小时前
人大金仓OS_Core数据库自动备份实施笔记(银河麒麟Linux)
linux·数据库·笔记·备份·人大金仓
老杨聊技术6 小时前
CentOS 7 安装 MySQL 8 保姆级教程
linux·mysql·centos
sunxr.2276 小时前
Mysql-----最后一次作业
数据库·mysql
普通网友6 小时前
Python FastAPI 异步数据库管理
数据库·fastapi
晓子文集6 小时前
Tushare接口文档:期货合约信息表(fut_basic)
大数据·数据库·金融·金融数据·量化投资
三言老师7 小时前
CentOS7.9:Redis‑Cluster集群部署结构化实战教程
linux·运维·服务器·数据库
旺仔学长 哈哈7 小时前
Spring Boot 智能停车场管理系统---附源码+数据库文档
数据库·spring boot·后端·智能停车场