MySQL Explain 关键字详解
创作时间:
作者:
@小白创作中心
MySQL Explain 关键字详解
引用
1
来源
1.
https://www.cnblogs.com/Yee-Q/p/18066673
MySQL的Explain关键字是优化SQL查询性能的重要工具,它能够帮助开发者理解查询执行计划,分析查询效率。本文将详细介绍Explain关键字的使用方法及其输出结果中各个字段的具体含义,帮助读者掌握如何通过Explain来优化数据库查询性能。
概述
explain 关键字可以模拟执行 SQL 查询语句,输出执行计划,分析查询语句的执行性能。使用方式如下:
explain select * from t1
执行计划各字段含义
1. id
- 如果 id 序号相同,从上往下执行
- 如果 id 序号不同,序号大先执行
- 如果两种都存在,先执行序号大,在同级从上往下执行
- 如果显示 NULL,最后执行,表示结果集,并且不需要使用它来进行查询
2. select_type
表示查询的类型,取值有如下:
- SIMPLE:简单的 select 查询,不包含子查询或者 UNION
- PRIMARY:复杂查询中最外层查询,比如使用 union 或 union all 时,id 为 1 的记录 select_type 通常是 primary
- SUBQUERY:指在 select 语句中出现的子查询语句,结果不依赖于外部查询(不在 from 语句中)
- DEPENDENT SUBQUERY:指在 select 语句中出现的查询语句,结果依赖于外部查询
- DERIVED:derived 称为派生表,在 FROM 子句的查询语句,表示从外部数据源中推导出来的,而不是从 SELECT 语句中的其他列中选择出来的
- UNION:若第二个 SELECT 出现在 UNION 之后,则被标记为 UNION;若 UNION 包含在 FROM 子句的子查询中,那么第一个 SELECT 将被标记为 DERIVED
- UNION RESULT:UNION 的结果
- DEPENDENT UNION:当 union 作为子查询时,其中第一个 union 为 dependent subquery,第二个 union 为 dependent union
3. table
表示当前行正在访问的表
4. type
表示查询使用的类型,性能由好到坏依次是:
system > const > eq_ref > ref > range > index > all
一般来说能达到 range 级别,最好能达到 ref 级别
- system:表只有一行(相当于系统表),是 const 类型的特例
- const:针对主键或唯一索引的等值查询扫描,只返回一行数据
- eq_ref:基于主键或唯一索引连接两个表,对于每个索引键值,只有一条匹配记录,被驱动表的类型为 eq_ref,这种类型只出现在 join
- ref:非唯一性索引扫描,返回匹配多个符合条件的行
- range:范围扫描,检索指定范围的行,一般出现在 where 语句出现 between、< 、>、in 等的查询
- index:只遍历索引树即可找到匹配的数据,比如下例中 user_id 就是 orders 表的索引
- all:遍历全表找到匹配的数据
5. possible_keys
显示可能使用到的索引,实际不一定被使用
6. key
实际使用的索引
7. key_len
索引使用的字节数,可通过该列计算查询中使用的索引的长度,主要用于联合索引
比如现有 users 表,执行以下 sql,该表有为 name 和 email 字段设置联合索引 index_name_email
explain select * from users where name = "张三" and email = "xxx@qq.com"
执行结果如下:
users 表结构如下:
name 和 email 字段都为 varchar,一个字符占 3 个字节,所以 key_len = 50 * 3 + 2 + 1 + 100 * 3 + 2 = 455,其中 varchar 需要额外占用 2 个字节,允许 NULL 值额外占用 1 个字节
据此我们可以得知 index_name_email 中的 name 和 email 字段都被使用了
8. ref
表示哪些列或常量被用于匹配用到的索引
9. rows
根据表统计信息及索引选用情况,估算出找到所需的记录所需要读取的行数,值越小越好,它不是结果集中的行数
10. filtered
表示某个表经过条件过滤之后,剩余记录条数的百分比
11. Extra
包含一些重要的额外信息
- Using index:出现索引覆盖,即查询和检索条件的列都在使用的索引里面,不需要回表
- Using where:不通过索引查询需要的数据
- 下例中 total_price 字段不存在索引
- Using index condition:表示查询列不被索引覆盖,where 条件中是一个索引范围查找,过滤完索引后回表找到所有符合条件的数据行
- Using filesort:当查询包含排序操作,又无法利用索引完成排序操作时,数据较少在内存排序,数据较多则在磁盘排序
- Using temporary:在做如去重、排序和分组等功能时,如果不能有效利用索引,就需要建立临时表来完成
热门推荐
金黄酥脆,外焦里嫩——自制炸鸡米花的极致诱惑!
马航370搜寻重启:新技术助力缩小搜索范围至13.4%
推拉力测试机的应用:PCBA元件推力测试流程与设备详解
内存条不兼容怎么办?解决内存条不兼容问题
从1→0.9,“躬身入局”做到极致!“数”读“六小龙”横空出世背后……
陈晓陈妍希离婚风波再起!经纪人无奈发声:家务事无需多问,望媒体放过
人工智能监管沙盒的发展及启示
小城公交突围记:滨州公交的多元化经营探索
如何平衡在职研究生与工作?
停车位地锁的解锁方法是什么?解锁后如何进行维护?
工控上位机界面设计:功能、颜值、体验三要素如何平衡?
博士毕业后的抉择:高校与公务员,何去何从?
憋尿被挠脚心会怎么样?这样做对身体有影响吗?
天竺葵如何养护,天竺葵养护有何技巧?
什么是蓝海?如何发现和进入蓝海市场?
锂电池和铅酸电池:冬季环境下哪种更耐用?
逗人开心又撩人:掌握这些情话对话技巧,让爱情升温
E5处理器在性能和价格方面表现如何?
简析房屋租赁合同中的房屋占有使用费
【武将攻略】族王浑:虚怀绥纳,献捷横江
丹参酮IIA通过调节巨噬细胞的胞葬作用减轻LDLR-/-小鼠动脉粥样硬化
如何以客观的态度看待社交活动?社交活动的实际效果如何进行评估?
皮肤白的人适合什么颜色的眉笔
雇佣关系和劳动关系的定义有什么不同?
【妙招】干,干,干!冬天加湿的正确做法
六款羊肉串秘制撒料配方及制作公式领悟透,你就是烧烤扛把子
简述颌骨骨折常用的复位及固定方法
手把手教你做正宗四川泡菜 超详细教程
股东如何证明自己已经出资:出资凭证的整理与存放
美国海外仓一件代发操作指南:从入门到精通