MySql的Explain命令使用

MySql的Explain命令使用

explain命令是mysql自带的一个命令,用于解释Mysql将如何处理SQL,执行顺序和是否使用了索引之类,我们平常可以用于SQL调优。

用法则是,在SQL前面加上这个命令,比如我们的SQL为,select * from table ,那么我们使用这个命令则是 explain select * from table。

这里我们运行一下命令,会得出一个表格:
在这里插入图片描述

接下里我们逐个字段来解释含义

id (较重要)

​ 可以理解成SQL的执行顺序,id值越大,表明越先执行,如果id一样,则按照从上往下的顺序进行执行。

select_type (不重要)

​ 表示查询的类型,常用有以下一些值

  • simple : 最简单的查询,不涉及表关联之类的
  • primary: 当涉及复杂查询时,这个标识着最外层的select查询
  • union : union关键词后的select语句
  • subquery : 子查询中的第一个select
  • derived : 包含在from子句中的子查询的select

table(不重要) 表名,无实际意义

type (很重要,可以优化的大点)

​ 性能从高到底:system > const > eq_ref >ref > ref_or_null >index_merge > unique_subquery > index_subquery > range > index > all

​ 这里说明几个常用的含义

  • system : 当表中只有一行数据会出现这个,非常快 (不需要优化)
  • const : 表示查询命中了主键或者唯一索引 (不需要优化)
  • eq_ref : 表示查询命中了主键或者索引 (不需要优化)
  • ref : 表示查询命中了非唯一性的索引 (可以略微优化使关联条件的字段为唯一索引)
  • range : 表示使用的索引选择了一个范围内进行查询 (不需要优化)
  • all : 没有使用索引,扫描了全表 (可以考虑建立索引或改变SQL写法)

possible_key(了解)

​ 表示Mysql可能使用哪个字段来进行表关联查询,也就是这些推荐的Key,是可以加索引的

key(非常重要)

​ 表示Mysql在查询中使用到的索引,就是真正的索引,如果为null,则表示没有用到索引,需要进行优化。

key_len(了解)

​ 表示查询用到的索引长度(字节数),原则上长度越短越好。

ref(了解)

​ 表示表连接之间的匹配关系,比如常量(const), 函数(func),字段名等

rows(比较重要)

​ 表示需要扫描的行数,行数越大,表示需要扫描的数据量越大,那么自然而然就会越慢了

extra(非常重要) : 表示额外信息

​ 具体的枚举值可以参考官方文档 : https://dev.mysql.com/doc/refman/5.7/en/explain-output.html#jointype_index_merge

​ 这里列举一些常用的

  • Using Index: 表示用到了索引,速度会很快
  • Using where: 没有用到索引,而是用到了where条件来进行过滤
  • Using temporary : 用到了临时表,一般在排序或分组时会出现
  • Using filesort: 没有利用索引来进行排序,也就是排序的字段上没有索引
  • Using join buffer: 连表查询时,连接条件没有用到索引
  • Impossible where: where条件有问题
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值