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

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


索引条件下推(以后补)

相关推荐
woxihuan1234565 小时前
SQL删除数据时存在依赖关系_设置外键级联删除ON DELETE
jvm·数据库·python
东风破1375 小时前
DM8达梦共享存储集群DSC搭建步骤
数据库·学习·dm达梦数据库
雪碧聊技术5 小时前
当数据库字段数大于Java实体类属性数时,MyBatis还能映射成功吗?一文详解
数据库·自动映射·mybatis映射机制·java实体类·宽容映射机制
Jetev5 小时前
如何确定SQL字段是否为空_使用IS NULL与IS NOT NULL
jvm·数据库·python
m0_702036536 小时前
mysql如何处理不走索引的OR查询_使用UNION ALL优化重写
jvm·数据库·python
代钦塔拉6 小时前
Qt4 vs Qt5 带参数信号槽的连接方式详解
开发语言·数据库·qt
2401_846339566 小时前
MySQL在云环境如何选择存储类型_SSD与高性能云盘配置建议
jvm·数据库·python
zhaoyong2227 小时前
SQL如何统计每个用户的首次行为时间_MIN聚合与分组
jvm·数据库·python
2501_901006477 小时前
C#怎么实现配置热更新 C#如何在运行时动态刷新配置文件不需要重启程序【技巧】
jvm·数据库·python
m0_470857647 小时前
HTML怎么创建响应式图片备选方案_HTML srcset与sizes结构【详解】
jvm·数据库·python