MySql学习笔记(五):explain-数据读取操作的操作类型
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,explain命令如下:mysql> explain select * from t_blog;+----+-------------+--------+------+---------------+
千家信息网最后更新 2025年11月11日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安全错误
数据库的锁怎样保障安全
网络安全法》的突出亮点在
女大学生软件开发
上海预付费软件开发
江苏pdu服务器电源制造商
梦幻西游口袋版三个服务器副本
党员对网络安全的看法
我国网络安全问题的论文
rosetta2安装数据库
app手机软件开发的价位
非居民企业在境外完成软件开发
计算机网络技术教学进度表
安徽交通软件开发定制公司
数据库实际收入怎么算
宁海直销软件开发外包
网络安全的功能和措施
北京拉手网络技术有限公司赤峰
互动展示软件开发
自适应软件开发asd框架
武装突袭服务器说不了话
互联网是科技发展中的一部分吗
ns暗黑重制版服务器上不去
支付宝领劵连接服务器超时
java 连接外网数据库
csol为什么总是服务器中断
如何复制房友的数据库
内网访问服务器数据库速度慢
监控数据库都有什么工具
银行软件开发中心级别
榆树通用网络技术咨询诚信经营
推单算法是服务器还是手机端