问答一下,轻松解决,电脑应用解决专家!
主板显卡CPU内存显示器
硬盘维修显卡维修显示器维修
注册表系统命令DOS命令Win8
存储光存储鼠标键盘
内存维修打印机维修
WinXPWin7Win10/Win11
硬件综合机箱电源散热器手机数码
主板维修CPU维修键盘鼠标维修
Word教程Excel教程PowerPointWPS
网络工具系统工具图像工具
数据库javascriptLinux系统
PHP教程CSS教程XML教程

mysql执行计划explain属性解析

更新时间:2021-04-10 15:41 作者:负债程序猿点击:
所谓执行计划就是看sql执行情况,有没有走索引啊之类的
 
很简单,在你的select语句前面加个EXPLAIN就行
 
比如我的查询语句是
SELECT * FROM pool WHERE operating_status = “OFFLINE”
那他的执行计划就这么看
 
EXPLAIN SELECT * FROM pool WHERE operating_status = "OFFLINE"
 
反馈结果:
从这个反馈就能看出你这个sql的执行情况
 
字段含义:
 
id:如果是子查询,表示各个子查询的顺序
 
id相同:执行顺序由上往下
id不同:id大的先执行
id为空:表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中
 
select_type:查询的类型
 
SIMPLE:简单select查询
PRIMARY:包含子查询的最外层查询,比如select * from tableA where id = (select b_id from tableB where name = “蔡徐鸡”)
SUBQUERY:在select或 where子句中包含的查询,比如select * from tableA where id = (select b_id from tableB where name = “蔡徐鸡”)
DERIVED:from子句中包含的查询
UNION:出现在union后的查询语句中
UNION RESULT:从UNION中获取结果集当前执行计划的最后一条记录
 
table:查询中涉及到的表
 
如果表有别名那就显示别名
 
type:访问类型
这个属性值很重要,代表访问类型,性能由上往下逐渐降低
 
system:表只有一行:system表。这是const连接类型的特殊情况。
const :表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。
eq_ref:对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用。
ref:只有在查询使用了不是唯一或主键的key或者是这些类型的部分(比如,利用最左边前缀)时发生。
range:使用索引返回一个范围中的行,比如使用>或<查找东西时发生的情况。
index:对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)。
ALL:对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免。
 
possible_keys:可能用到的索引
 
查询涉及字段上若存在索引,就会列出来。当该列为 NULL时就要考虑当前的SQL是否需要优化了
 
key:实际用的索引
 
查询中实际使用的索引,若没有使用索引,显示为Null
 
key_length:索引长度
 
char()、varchar()索引长度的计算公式:(Character Set:utf8mb4=4,utf8=3,gbk=2,latin1=1) * 列长度 + 1(允许null) + 2(变长列)
 
ref:连接匹配条件
 
表示上述表的哪些列被用于查找索引列上的值,如果是使用的常数等值查询,这里会显示const,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func。
 
rows:估算的查询结果行数
 
估算的,可能不准确
 
extra:附加信息
这个属性值也很重要
 
Using index:使用覆盖索引
Using where:使用了用where子句来过滤结果集
Using filesort:使用文件排序,使用非索引列进行排序时出现,非常消耗性能,尽量优化
Using temporary:使用了临时表
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
你可能感兴趣的内容