MySql学习笔记(五):explain-数据读取操作的操作类型
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,explain命令如下:mysql> explain select * from t_blog;+----+-------------+--------+------+---------------+
千家信息网最后更新 2026年11月03日MySql学习笔记(五):explain-数据读取操作的操作类型
explain命令如下:
mysql> explain select * from t_blog;+----+-------------+--------+------+---------------+------+---------+------+------+-------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+--------+------+---------------+------+---------+------+------+-------+| 1 | SIMPLE | t_blog | ALL | NULL | NULL | NULL | NULL | 7 | |+----+-------------+--------+------+---------------+------+---------+------+------+-------+1 row in set
其中select_type列指明该条SQL的读取操作的操作类型。
select_type共有六种类型:simple、primmy、subQuery、derived、union、union result。
1、simple
表示该条sql是简单的select,不包含任何子查询和union,例:
mysql> explain select * from t_blog;+----+-------------+--------+------+---------------+------+---------+------+------+-------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+--------+------+---------------+------+---------+------+------+-------+| 1 | SIMPLE | t_blog | ALL | NULL | NULL | NULL | NULL | 7 | |+----+-------------+--------+------+---------------+------+---------+------+------+-------+1 row in set
2、primmy
查询中如果包含了任何一个子查询,最外层的查询就会被标记为primmy,例:
mysql> explain select * from t_blog where id = (select id from t_type where name = "JAVA");+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------------+| 1 | PRIMARY | t_blog | const | PRIMARY | PRIMARY | 4 | const | 1 | || 2 | SUBQUERY | t_type | ALL | NULL | NULL | NULL | NULL | 4 | Using where |+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------------+2 rows in set
这条sql一共读取了两张表,t_type作为子查询被加载,t_blog作为最外部的读取操作,被标记为 PRIMMY。
3、subquery
查询中,在select或where自居中包含了子查询,该子查询就会被标记为subquery,如上例的t_type
4、derived
在from里列表中包含了子查询,该子查询会被标记为derived(衍生),例:
mysql> explain select * from t_blog inner join (select id from t_type) a on t_blog.typeId = a.id;+----+-------------+------------+-------+---------------+---------+---------+------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+------------+-------+---------------+---------+---------+------+------+-------------+| 1 | PRIMARY || ALL | NULL | NULL | NULL | NULL | 4 | || 1 | PRIMARY | t_blog | ALL | NULL | NULL | NULL | NULL | 7 | Using where || 2 | DERIVED | t_type | index | NULL | PRIMARY | 4 | NULL | 4 | Using index |+----+-------------+------------+-------+---------------+---------+---------+------+------+-------------+3 rows in set
t_type表读取时,出现在from语句中,因此被标记为derived。mysql会先将from语句的子查询的查询结果放到一张临时表中,然后再将最终的结果返回,所以,是很耗费内存的一种操作。值得注意的是,在第一行的table列出现了
5、union
若sql中包含了union,第二个select会被标记为union
mysql> explain select * from t_blog b left join t_type t on b.typeId = t.id union select * from t_blog b1 right join t_type t1 on b1.typeId = t1.id;+------+--------------+------------+--------+---------------+---------+---------+---------------+------+-------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+------+--------------+------------+--------+---------------+---------+---------+---------------+------+-------+| 1 | PRIMARY | b | ALL | NULL | NULL | NULL | NULL | 7 | || 1 | PRIMARY | t | eq_ref | PRIMARY | PRIMARY | 4 | blog.b.typeId | 1 | || 2 | UNION | t1 | ALL | NULL | NULL | NULL | NULL | 4 | || 2 | UNION | b1 | ALL | NULL | NULL | NULL | NULL | 7 | || NULL | UNION RESULT || ALL | NULL | NULL | NULL | NULL | NULL | |+------+--------------+------------+--------+---------------+---------+---------+---------------+------+-------+5 rows in set
t1表和t2表都出现在union后的select,因此都被标及为union
6、union result
表示该查询是从union表中获取结果的select,是union的结果集,如上例,上条select就是获取的union的结果集
查询
标记
结果
衍生
类型
如上
就是
语句
中包
一行
个子
内存
命令
外层
字样
数字
来源
先将
数据
笔记
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科技和互联网公司
科技互联网政务服务
金诺互联网科技
互联网科技战争
科技服务与互联网
碳银互联网科技
互联网金融科技平台
互联网科技美容
互联网科技咨询
西藏七维空间互联网科技有限公司
互联网科技寓意
湖南诚度互联网科技有限公司
重庆互联网医院沙龙医盟信息科技
速维有品互联网信息科技(苏州)有限公司
哈尔滨屹滨互联网科技有限公司
迪庆互联网科技招生
互联网科技股为什么大涨
互联网科技数字货币
互联网高科技行业有哪些企业
互联网企业和网络科技有限公司
耶加雪菲
互联网科技图片
北京路客互联网科技有限公司
重庆互联网络科技
平安科技 互联网
居家互联网科技有限公司
蓝色互联网科技
央行互联网金融科技公司
岳阳华臻互联网科技有限公司
恒生科技指数 中概互联网