explain工具详解

explain工具详解

explain是MySQL提供的一个工具;可以使用该工具判断索引的使用情况,从而可以根据结果对sql进行优化
explain主要包括id,select_type,table,type,possible_key,key,key_len,ref,rows,extra等信息

例如:EXPLAIN SELECT * FROM peoson WHERE id =1;

1.id

select 的序列号,有几个select就有几个id,id越大执行的优先级越高;id相同从上往下一次执行

2.select_type

  • 意义:表示语句是简单查询还是复杂查询
  • 对应数值
    • simple:简单查询,不包含子查询和union
    • primary: 复杂查询中最外层的查询
    • subquery: 子查询,包含在select后面的子查询,不包括from后面的子查询
    • derived: form后面的子查询,结果回放到一个衍生表内
    • union: union链接中的第二个以及随后的select

table

表示这一步所对应的数据库表的名称或者简称

type

  • null:mysql在优化阶段分析语句,不需要访问表或者索引,例如获取索引列的最大值,最小值
  • system:使用唯一索引等值查询,同时数据表中只有一条数据

    注意测试时数据库存储引擎需要设置为myisam

  • const:使用唯一索引进行等值查询,表中最多有一行数据匹配
  • eq_ref:进行连表查询时,关联字段是唯一索引,表中只有一条数据匹配
  • ref:使用普通索引或者唯一索引的部分前缀索引查询,可以匹配到多条数据
  • range:使用一个索引检索给定范围的数据,通常使用< ,>,in,between时
  • index:扫描全索引表即可获取所需结果,索引表为普通索引,不需要回表查询
  • all:全表扫描,无法命中索引

possible_key

表示查询可能会用到的索引

key

表示查询时真正用到的索引

key_len

  • 定义:表示使用索引占用的字节数,例如组合索引只使用到前面几个字段,可以通过这个字段判断用到了那些字段
  • key_len计算规则
    • 字符串:varchar(n)中n代表的是字符数,一个数字或者一个字母占用一个字节,utf8编码格式下一个汉字占用3个字节,所以字符串占用字节可以用3n+2表示,2个字节用于存储字符串长度
    • 数值类型
      • tinyint:1字节
      • smallint:2字节
      • int:4字节
      • bigint:8字节
    • 时间类型
      • date:3字节
      • timestamp:4字节
      • datetime:8字节
    • 字段如果允许为null,需要一个字节记录是否为null

ref

表示key列对应索引中,查询所用到的列名称,或者常量const

rows

预测要扫描的行数

extra

  • using index:使用覆盖索引,不需要回表查询
  • using where:使用where查询,并且查询条件未被索引覆盖
  • using index condition:表示查询条件中虽然出现了索引但是有部分索引无法使用(例如联合索引只有第一个索引命中),回根据能用的索引查询一遍,然后在匹配无法使用的索引
  • using temporary:查询时需要创建一个临时表
  • using filesort:使用外部排序而不是索引排序,一般是需要优化的
  • select tables optimezed away:使用某一个聚合函数(max,min)来访问存在索引的某个字段
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLEXPLAIN命令是一个非常重要的工具,用于优化查询语句的性能。当我们执行一个SELECT语句时,MySQL会对这个查询进行优化,生成一种最优的查询方案。EXPLAIN命令可以帮助我们查看MySQL优化查询的过程,并且可以让我们更好地理解查询的执行计划。 EXPLAIN命令显示了MySQL优化器如何处理一个SELECT语句。它会返回一张表格,其中包含了MySQL如何处理这个查询的详细信息。这个表格中的每一行都表示了一个查询执行计划中的步骤。 下面是EXPLAIN命令返回的表格中列的含义: - id:查询执行的顺序,如果有子查询,那么id就是父查询id加上一个“.”再加上子查询的id,例如:1.1表示父查询id为1,子查询id为1。 - select_type:查询类型,包括SIMPLE、PRIMARY、SUBQUERY等。 - table:访问的表名。 - partitions:访问的分区。 - type:访问的类型,包括system、const、eq_ref、ref、range、index、all等,从最好到最差的访问方式排序为:system、const、eq_ref、ref、range、index、all。 - possible_keys:可能使用到的索引。 - key:实际使用的索引。 - key_len:使用的索引的长度。 - ref:使用的索引的引用,例如:表名.列名。 - rows:扫描的行数。 - filtered:查询返回的行数与扫描的行数的比例。 - Extra:附加信息,包括Using filesort、Using temporary等。 使用EXPLAIN命令可以帮助我们找到查询语句的性能瓶颈,并且可以优化查询语句,提高查询的性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值