MySql学习笔记(五):explain-数据读取操作的操作类型
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,explain命令如下:mysql> explain select * from t_blog;+----+-------------+--------+------+---------------+
千家信息网最后更新 2025年01月23日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安全错误
数据库的锁怎样保障安全
服务器bmc管理口什么样子
网络安全工作具体措施
远程服务器安全管理办法
软件开发海外外包
全球科技资讯数据库
为什么域名备案必须有服务器
专业软件开发培训的费用
棋牌类游戏软件开发公司
服务器中加入线程
解决服务器安全风险的功能
数据库2008替换的语句
存储服务器和平台
明日之后莫洛城堡服务器
新服务器怎么加d盘
为什么说网络安全非常重要简述
服务器类似于
国产服务器运维
陕西定制化服务器什么价位
战地2042主机哪个服务器人多
火山云数据库
网络安全周金融宣传标语
数据库课程开发技术
猫和老鼠拼图软件开发
网络安全系统基础设计方案
启动和退出数据库有几种方法
服务器类似于
江苏网络安全宣传周校园日
软件开发劳务价格
sql数据库体系
数据库curd操作中的r指的是